是否可以重命名带有依赖项的 maven jar?

2022-08-31 07:25:19

我目前正在使用带有依赖项的 jar 程序集来创建这样的 jar。但是,我的罐子的名字有点长。

由于这个罐子被AS400上的RPG程序使用,我想缩短它,以使这些开发人员的生活更轻松一些。但是,除了手动之外,我还没有找到一种方法来重命名通常的jar。我想要类似的东西project-name-version-classifier-jar-with-dependencies.jarproject-name-version-classifier-full.jar

有没有这样做,基本上不复制jar-with-依赖项程序集描述符并调用它满?

此外,我希望继续将没有组装的类路径的jar存储在存储库中。

我需要两个工件。带有我的分类器的罐子保存构建所针对的区域。包含所有依赖项的 jar,其中还包括区域。

project-name-version-region-full.jar并应存储在存储库中。在第一个示例中,分类器是区域完整的,在第二个示例中是区域。后者正在发挥作用。project-name-version-region.jar


答案 1

您可以指定 finalName 属性以为 jar 指定所需的名称,并指定 appendAssemblyId 应为 false 以避免“jar-with-dependencies”后缀。

下面的配置将输出一个名为“test.jar”的jar。

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>test</finalName>
        <appendAssemblyId>false</appendAssemblyId>
      </configuration>
    </execution>
  </executions>
</plugin>

更新:根据您的评论,使用内置描述符将不起作用。我相信这归结为最新版本的汇编插件中的一个错误 - 他们已经删除了对分类器的支持,但是如果你使用内置的描述符,id是固定的,所以你最终会得到一个大的愚蠢的名字。

作为一种解决方法,您可以复制带有依赖项的 jar 描述符使用的程序集描述符并修改 id。

此示例将导致程序集 id 追加到 finalName,因此,如果需要将区域完整名称指定为.jar,则可以将 finalName 指定为区域,将程序集 ID 指定为完整。这将导致目标中出现一个名为 region-full.jar 的文件,但请注意,它仍将作为附加项目安装到 Maven 存储库中,并完全用作分类器。只要此 ID 与其他程序集的 ID 不同,就不应该发生冲突。

pom 配置将如下所示。

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-4</version>
  <executions>
    <execution>
      <id>jar-with-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptors>
          <descriptor>src/main/assembly/jar-assembly.xml</descriptor>
        </descriptors>
        <finalName>region</finalName>
      </configuration>
    </execution>
  </executions>
</plugin>

和 jar-assembly.xml src/main/assembly 中,如下所示:

<assembly>
  <id>full</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
    </fileSet>
  </fileSets>
</assembly>

答案 2

我想我已经找到了一种方法,可以直接在pom中配置它,而不需要单独的jar组装.xml。

它基本上与Rich的答案相同,除了 finalName 是用 artifactId 和 version 指定的。

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>${project.artifactId}-${project.version}-full</finalName>
        <appendAssemblyId>false</appendAssemblyId>
        <archive>
            <manifest>
                <mainClass>com.mycompany.MyMainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-my-jar-with-dependenciess</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

推荐