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>