是否有可能重新命名一个maven jar -with-dependencies?
我目前正在使用jar-with-dependencies程序集来创build这样一个jar。 不过,我的jar的名字有点长。
由于这个jar被AS400上的RPG程序所使用,我想缩短它,使开发人员的生活变得容易一些。 但是,除了手工,我还没有find一种方法来重新命名从通常的project-name-version-classifier-jar-with-dependencies.jar
。 我想要像project-name-version-classifier-full.jar
这样的东西
有没有办法做到这一点,没有基本上复制jar-with-dependencies程序集描述符,并调用它完整?
另外,我想继续保存没有组装在存储库中的类path的jar。
我需要两件神器。 与我的分类器持有build设的地区的jar子。 与所有依赖包括该地区的jar子。
project-name-version-region-full.jar
和project-name-version-region.jar
应该存储在存储库中。 在第一个例子中,分类器是区域满的,在第二个区域。 后者正在工作。
您可以指定finalName属性来为jar指定所需的名称,并指定appendAssemblyId为false以避免“jar-with-dependencies”后缀。
下面的configuration将输出一个名为“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>
更新:根据您的意见,使用内置的描述符将无法正常工作。 我相信这是组装插件的最新版本中的一个错误 – 他们已经删除了对分类器的支持,但是如果使用内置的描述符,则标识符是固定的,所以最终会得到一个很大的名字。
作为一种解决方法,您可以复制jar-with-dependencies描述符所使用的程序集描述符并修改该id。
这个例子会导致程序集标识符被追加到finalName中,所以如果你需要有一个region-full.jar的名字,你可以指定finalName作为区域 ,程序集标识符是完整的 。 这将导致名为region-full.jar的目标文件,但是请注意,它仍将作为附加的工件安装到Maven存储库中,并作为分类器使用。 只要这个ID与你的其他组件不同,就不会有碰撞。
POMconfiguration看起来像这样。
<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>
我想我已经find了一种方法来直接在pom中configuration,而不需要单独的jar-assembly.xml。
这与Rich的答案基本相同,只是使用artifactId和version指定了finalName。
<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>
感谢这里的post和一些挖掘maven文档我已经拿出了一个一般的一次性重新打包的可执行jar程序集与自定义名称的configuration。
在pom.xml中:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2</version> <executions> <execution> <id>exe</id> <phase>package</phase> <goals><goal>single</goal></goals> <configuration> <finalName>MyJarName</finalName> <attach>false</attach> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>assembly.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>karlthepagain.MyMain</mainClass> </manifest> </archive> </configuration> </execution> </executions> </plugin>
在assembly.xml中:
<assembly> <id>exe</id> <formats> <format>jar</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <unpack>true</unpack> <scope>runtime</scope> </dependencySet> </dependencySets> </assembly>
这将生成MyJarName.jar
,将它的所有依赖重新打包到同一个jar和指定的Main-Class: karlthepagain.MyMain
。
我打算给Rich指出我正确的方向,但是想要发布Rich的稍微closures的解决scheme:
我的jar-assembly.xml看起来像这样,它允许程序集id更改为我的configuration文件中存储为属性的区域:
<assembly> <id>${env}-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>
我没有在maven-assembly-plugin设置中使用finalName参数,因为这用我的project-name-version-env-full.jar名称构build了我的项目,其中env-full是分类器。
想象一下,当我知道程序集xml可以被构build中的项目参数化时,我感到惊讶。 这正是我所期待的。
这对我有效
<build> <finalName>anynameyoulike</finalName> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <appendAssemblyId>false</appendAssemblyId> <archive> <manifest> <mainClass>com.mycompany.MyMainClass</mainClass> </manifest> </archive> </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> </plugins> </build>