一尘不染

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

java

我目前正在使用jar-with-dependencies程序集创建这样的jar。但是,我的罐子的名称有点长。

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

无论如何,在没有基本复制jar-with-dependencies程序集描述符并将其完全调用的情况下执行此操作吗?

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

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

project-name-version-region-full.jarproject-name-version- region.jar应存储在存储库中。在第一个示例中,分类器是全区域的,在第二个示例中是区域。后者正在工作。


阅读 240

收藏
2020-12-03

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

更新:根据您的评论,使用内置描述符将不起作用。我认为这归结于最新版本的Assembly-Plug中的一个错误-
他们已经删除了对分类器的支持,但是如果您使用内置描述符,则ID是固定的,因此您会以一个笨拙的名字结尾。

解决方法是,您可以复制jar-with-dependencies描述符使用的程序集描述符并修改ID。

此示例将导致程序集ID附加到finalName,因此,如果您需要使用名称 region-full.jar ,则可以将finalName指定为
region, 而将程序集ID指定为 full 。这将在目标中生成一个名为region-
full.jar的文件,但请注意,该文件仍将作为附加工件安装到Maven存储库,其中 full
用作分类器。只要此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>

和src / main / assembly中的jar-assembly.xml像这样:

<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>
2020-12-03