Java 是否可以重命名具有依赖项的maven jar?
我目前正在使用带有依赖项的jar程序集来创建这样一个jar。然而,我的罐子的名字有点长 由于这个jar正被AS400上的RPG程序使用,我想缩短它,让开发人员的生活更轻松一些。但是,除了手工操作之外,我还没有找到一种方法来将jar从通常的Java 是否可以重命名具有依赖项的maven jar?,java,maven-2,jar,maven-assembly-plugin,Java,Maven 2,Jar,Maven Assembly Plugin,我目前正在使用带有依赖项的jar程序集来创建这样一个jar。然而,我的罐子的名字有点长 由于这个jar正被AS400上的RPG程序使用,我想缩短它,让开发人员的生活更轻松一些。但是,除了手工操作之外,我还没有找到一种方法来将jar从通常的项目名称版本分类器jar与dependencies.jar一起重命名。我想要类似于项目名称版本分类器full.jar的东西 在不使用依赖项程序集描述符复制jar并调用它full的情况下,是否仍可以这样做 此外,我希望继续将jar存储在存储库中,而不必组装类路径
项目名称版本分类器jar与dependencies.jar一起重命名。我想要类似于项目名称版本分类器full.jar的东西
在不使用依赖项程序集描述符复制jar并调用它full的情况下,是否仍可以这样做
此外,我希望继续将jar存储在存储库中,而不必组装类路径
我需要两件文物。带有我的分类器的jar保存构建所针对的区域。jar包含所有依赖项,其中也包括区域
project name version region full.jar
和project name version region.jar
应存储在存储库中。在第一个示例中,分类器是区域满的,在第二个示例中是区域满的。后者正在工作。您可以指定finalName属性为jar提供所需的名称,并指定appendAssemblyId应为false以避免使用“jar with dependencies”后缀
下面的配置将输出一个名为“test.jar”的jar
描述符并修改id
此示例将导致程序集id附加到finalName,因此如果需要名称region-full.jar,可以将finalName指定为region,将程序集id指定为full。这将在target中生成一个名为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>
maven汇编插件
2.2-β-4
带有依赖项的jar
准备包装
单一的
src/main/assembly/jar-assembly.xml
区域
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>
满的
罐子
假的
真的
运行时
${project.build.outputDirectory}
我要赞扬Rich为我指明了正确的方向,但我想发布对我有效的解决方案,因为Rich的解决方案有点偏离:
我的jar-assembly.xml如下所示,它允许更改作为属性存储在我的配置文件中的区域的程序集id:
<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>
${env}-已满
罐子
假的
真的
运行时
${project.build.outputDirectory}
我没有在maven assembly插件设置中使用finalName参数,因为它使用我的project-name-version-env-full.jar名称构建了我的项目,其中env-full是分类器
想象一下,当我得知汇编xml可以由构建中的项参数化时,我会有多么惊讶。这正是我想要的。多亏了这里的帖子和对jar程序集的深入研究,我为一个具有自定义名称的一次性重新打包的可执行jar程序集提供了以下配置
在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>
maven汇编插件
2.2
exe
包裹
单一的
我的名字
假的
假的
assembly.xml
karlthepagain.MyMain
在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>
exe
罐子
假的
/
真的
运行时
这将产生MyJarName.jar
,它的所有依赖项都重新打包到同一个jar中,并指定Main类:karlhepagain.MyMain
我想我已经找到了一种方法,可以直接在pom中配置它,而不需要单独的jar-assembly.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>
maven汇编插件
带有依赖项的jar
${project.artifactId}-${project.version}-完整
假的
com.mycompany.MyMainClass
让我的罐子充满依赖
包裹
单一的
这对我很有效
<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>
你喜欢什么名字
maven汇编插件
2.6
带有依赖项的jar
假的
com.mycompany.MyMainClass
组装
包裹
单一的
也可以使用${project.build.finalName}
作为最终名称覆盖原始jar文件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>${project.build.finalName}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
maven汇编插件
包裹
单一的
带有依赖项的jar
${project.build.finalName}
假的
在这方面的工作非常丰富。本质上,我需要存储两个分类器工件。当appendAssemblyId打开时,我有3个工件,一个没有分类器,一个是分类器
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>${project.build.finalName}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>