Java 控制Maven jar工件的最终名称
我试图在超级pom中定义一个属性,它将被所有子项目用作生成工件的目标 为此,我考虑使用Java 控制Maven jar工件的最终名称,java,maven-2,jar,build-automation,Java,Maven 2,Jar,Build Automation,我试图在超级pom中定义一个属性,它将被所有子项目用作生成工件的目标 为此,我考虑使用project/build/finalName,但这似乎不起作用,即使是对于简单的POM: 命令 POM 4.0.0 com.mycompany.app 我的应用程序 1.0-快照 罐子 我的应用程序 http://maven.apache.org UTF-8 ${project.name}-测试 朱尼特 朱尼特 3.8.1 测试 当我执行时: $mvn安装 [信息]正在扫描项目。。。 [信息]------
project/build/finalName
,但这似乎不起作用,即使是对于简单的POM:
命令
POM
4.0.0
com.mycompany.app
我的应用程序
1.0-快照
罐子
我的应用程序
http://maven.apache.org
UTF-8
${project.name}-测试
朱尼特
朱尼特
3.8.1
测试
当我执行时:
$mvn安装
[信息]正在扫描项目。。。
[信息]------------------------------------------------------------------------
[信息]构建我的应用程序
[信息]任务段:[安装]
[信息]------------------------------------------------------------------------
[信息][资源:资源{执行:默认资源}]
[信息]使用“UTF-8”编码复制筛选的资源。
[信息]跳过不存在的resourceDirectory/tmp/mvn_test/my app/src/main/resources
[信息][编译器:编译{执行:默认编译}]
[信息]无需编译-所有类都是最新的
[INFO][resources:testResources{execution:defaulttestresources}]
[信息]使用“UTF-8”编码复制筛选的资源。
[信息]跳过不存在的resourceDirectory/tmp/mvn_test/my app/src/test/resources
[信息][编译器:testCompile{执行:默认testCompile}]
[信息]无需编译-所有类都是最新的
[INFO][surefire:test{执行:默认测试}]
[信息]Surefire报告目录:/tmp/mvn\u test/my app/target/Surefire报告
-------------------------------------------------------
T T S T S
-------------------------------------------------------
运行com.mycompany.app.AppTest
测试运行:1,失败:0,错误:0,跳过:0,所用时间:0.024秒
结果:
测试运行:1,失败:0,错误:0,跳过:0
[INFO][jar:jar{执行:默认jar}]
[信息][安装:安装{执行:默认安装}]
[信息]将/tmp/mvn_test/my-app/target/my-app-testing.jar安装到/home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[信息]------------------------------------------------------------------------
[信息]构建成功
[信息]------------------------------------------------------------------------
[信息]总时间:2秒
[信息]完成时间:2010年11月21日星期日18:37:02
[信息]最终内存:17M/162M
[信息]------------------------------------------------------------------------
我希望字符串“testing”会出现在生成的工件名称中的某个地方
我是否误解了“finalName”的用途?正如您所指定的,您所使用的方法确实会使用名称中带有字符串“testing”的jar文件,但默认安装命令会将其发送到~/.m2/存储库目录,如以下输出行所示:
/tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
在我看来,您试图生成一个具有这样名称的jar,然后将其复制到您选择的目录中
尝试使用此处描述的outputDirectory属性:@Maxim试试这个 pom.xml
org.opensource
在打包阶段,该插件允许通过
文件映射:
maven耳朵插件
org.apache.maven.plugins
如果您已通过配置文件或其他方式将您的版本配置为“测试”,
这将有助于战争方案:
maven战争插件
org.apache.maven.plugins
maven战争插件
2.2
UTF-8
@{groupId}-@{artifactId}-@{baseVersion}@@{dashClassifier?}@.@{extension}@
您可以在插件配置部分设置finalName
属性:
org.apache.maven.plugins
更新:
对于Maven>=3
根据评论,您现在可以这样做:
jar
你喜欢什么
请参阅。所有提供的答案都比必要的更复杂。假设您正在构建一个jar文件,您需要做的就是在
部分添加一个
标记:
<properties>
<jar.finalName>${project.name}</jar.finalName>
</properties>
这在-注意用户属性中:
finalName:
Name of the generated JAR.
Type: java.lang.String
Required: No
User Property: jar.finalName
Default: ${project.build.finalName}
命令行使用
您还应该能够在命令行上使用此选项,包括:
mvn -Djar.finalName=myCustomName ...
您应该获得myCustomName.jar,尽管我还没有测试过它。这对我很有用
mvn jar:jar -Djar.finalName=custom-jar-name
在我的maven ee项目中,我使用了:
<build>
<finalName>shop</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.version}</version>
<configuration><webappDirectory>${project.build.directory}/${project.build.finalName} </webappDirectory>
</configuration>
</plugin>
</plugins>
</build>
商店
org.apache.maven.plugins
maven战争插件
${maven.war.version}
${project.build.directory}/${project.build.finalName}
我正在使用以下命令
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}.${monthlyVersion}.${instanceVersion}</finalName>
</configuration>
</plugin>
....
这将放置一个文件夹target\{group.id}\projectName-1.2.3.jar
节省时间的更好方法可能是
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}</finalName>
</configuration>
</plugin>
....
这将放置一个文件夹target\{group.id}\projectName-1.2.3.jar
您还可以在配置
中使用outputDirectory
来指定您可能希望包定位的位置。最简单的解决方案:
<artifactId>Example</artifactId>
<version>1.0</version>
<properties>
<jarName>${project.artifactId}-${project.version}</jarName>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${jarName}</finalName>
</configuration>
</plugin>
</plugins>
</build>
示例
1
${project.artifactId}-${project.version}
org.apache.maven.plugins
maven jar插件
3.0.2
${jarName}
其结果是:
mvn clean package-DjarName=123
->target/123.jar
mvn clean package
->target/Example.jar实际上,我的完整设置如下:我有一个superpom,我想在其中定义我构建的当前版本。然后我有几个项目将这个pom定义为它们的父项目。我使用hudson ci来构建所有这些项目。然后哈德逊把这些项目推进了人工工厂。我正在寻找一些可以让我更改当前正在构建的版本的东西。我会看看如何使用你
mvn package -DbaseVersion=1 -monthlyVersion=2 -instanceVersion=3
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}</finalName>
</configuration>
</plugin>
....
mvn package -DbaseVersion=0.3.4
<artifactId>Example</artifactId>
<version>1.0</version>
<properties>
<jarName>${project.artifactId}-${project.version}</jarName>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${jarName}</finalName>
</configuration>
</plugin>
</plugins>
</build>