Java Maven将依赖关系的jar部署到repo
我可以通过在我的Java Maven将依赖关系的jar部署到repo,java,maven,deployment,Java,Maven,Deployment,我可以通过在我的pom.xml中使用以下命令并运行mvndeploy来部署jar: <distributionManagement> <repository> <id>releases</id> <url>http://${host}:8081/nexus/content/repositories/releases</url> </repository>
pom.xml
中使用以下命令并运行mvndeploy
来部署jar
:
<distributionManagement>
<repository>
<id>releases</id>
<url>http://${host}:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Internal Snapshots</name>
<url>http://${host}:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
问题是我不知道如何将它们缝合在一起,以便将可执行文件
jar
部署到我的Maven repo。我真的不知道这是通过一个新插件实现的,还是通过在现有的汇编插件中添加一个目标或其他步骤来实现的。以下方法奏效了。我将把这个问题留一点时间,因为我不确定这是最佳实践,但工作是重要的
我注意到的问题是,我编了ID名,我不知道这是否是惯例,我必须硬编码jar名;这不是从其他任何东西推断出来的
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>deploy-executable</id>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<file>target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar</file>
</configuration>
</execution>
</executions>
</plugin>
maven部署插件
2.7
部署可执行文件
部署文件
target/Monitoring-Client-1.0-SNAPSHOT-jar-with-dependencies.jar
为了构建(所谓的)Über JAR并使用maven进行部署,您还可以使用。下面的代码取自他们的网站,但我已经做了一两个使用此功能的项目
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>jackofall</shadedClassifierName> <!-- Any name that makes sense -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
...
org.apache.maven.plugins
maven阴影插件
2
包裹
阴凉处
真的
杰克福尔
...
在这个配置中,除了普通JAR之外,还可以将Über JAR作为一个部署。然后,JAR的用户可以决定基于分类器提取多功能包或具有依赖关系的JAR
我通常会使用shade插件来构建Über JAR(或者以某种方式修改JAR),并使用assembly插件来构建安装包(包含JAR和其他可能的东西)。但是,我不确定单个插件的预期目标是什么。从本质上说,我的
pom.xml
已经偏离了轨道。一切都会自行安排好的。我以前做过:
- 将所有依赖项保存到lib文件夹中
- 用一个类路径构建一个jar,该类路径将lib文件夹阻塞
- 使用组装插件制作另一个可部署的jar
但是,通过删除1和2,只需要
分发管理
部分,部署阶段自动工作。总而言之,这是一个通过删除大量代码来添加功能的惊人案例。首先,您不应该在部署阶段创建ueber jar,最好在打包阶段创建。此外,创建的jar文件通常会自动附加到您的工件上,并将传输到远程存储库(在您的Nexus中)。如果您只是尝试进行mvn安装,并查看创建的jar安装到本地存储库中时的输出,则可以检查这一点。
要将结果部署到nexus中,您需要调用mvn deploy。如果将程序集绑定到打包阶段,则在您进行构建时,它将在您的存储库中安装“常规”jar和with dependencies jar:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.company.app.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
maven汇编插件
my.company.app.Main
带有依赖项的jar
组装
包裹
单一的
然后只需运行
mvn clean install deploy
即可将两个jar上载到您的存储库。很有趣……那么您想要一个包含所有依赖项(jar with dependencies
)的jar到nexus吗?我假设当您将它部署到生产环境中时,这个jar将是独立的(因为它的所有依赖项都嵌入其中)?我有相同的症状,*jar-with-dependencies.jar没有通过部署推送。我的问题是插件的配置不正确-我必须绑定到docs()中描述的包阶段@ahains谢谢!这是一个更好的解决办法。请对此做出回答,这样我才能真正投票给你:)看起来不错,但不幸的是对我不起作用:未能执行goal org.apache.maven.plugins:maven deploy plugin:2.8.2:project BackofficeSmokeTest上的部署文件(默认cli):参数“file”,目标org.apache.maven.plugins:maven deploy plugin:2.8.2:deploy文件的“url”丢失或无效->[Help 1]我希望该项目可以在
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.company.app.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>