Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 控制Maven jar工件的最终名称_Java_Maven 2_Jar_Build Automation - Fatal编程技术网

Java 控制Maven jar工件的最终名称

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安装 [信息]正在扫描项目。。。 [信息]------

我试图在超级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安装
[信息]正在扫描项目。。。
[信息]------------------------------------------------------------------------
[信息]构建我的应用程序
[信息]任务段:[安装]
[信息]------------------------------------------------------------------------
[信息][资源:资源{执行:默认资源}]
[信息]使用“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>