Maven 部署 jar 及其依赖项以存储库

2022-09-02 04:35:08

我可以在我的和运行中使用以下方法部署 :jarpom.xmlmvn deploy

    <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-with-dependencies

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>create-executable-jar</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <mainClass>my.company.app.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>

问题是我不知道如何将这些拼接在一起以将可执行文件部署到我的Maven存储库。我真的不知道这是通过新插件还是通过向现有汇编插件添加目标或其他步骤来实现的。jar


答案 1

如果将程序集绑定到打包阶段,则在进行构建时,它将在存储库中同时安装“常规”jar 和带有依赖项的 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>

然后只需运行即可将两个 jar 上传到您的存储库。mvn clean install deploy


答案 2

为了构建一个(所谓的)Über JAR并使用maven进行部署,您还可以使用shade插件。以下代码取自他们的网站,但我使用此功能制作了一两个项目。

 <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>

在此配置中,您将获得 Über JAR 作为普通 JAR 之外的一个部署。然后,JAR 的用户可以决定拉取一体式包或具有基于分类器的依赖项的 JAR。

我通常会使用 shade 插件来构建 Über JAR(或以某种方式修改 JAR),并使用汇编插件来构建安装包(包含 JAR 和可能的其他内容)之类的东西。但是,我不确定单个插件的预期目标是什么。


推荐