Spring Boot控制目标JAR文件名

时间:2016-06-08 09:26:37

标签: java maven spring-boot

我的Spring Boot项目有构建描述:

<build>

    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>2.18.1</version>
                </dependency>
            </dependencies>
        </plugin>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.app.MainClass</mainClass>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

    </plugins>
</build>

我希望我的JAR文件名在一个分支中为app-1.0-SNAPSHOT.jar,在另一个分支中为1.0-RELEASE.jar,由Jenkins控制(使用某种mvn设置或JVM参数,如-D ..

我可以这样做吗?

3 个答案:

答案 0 :(得分:21)

如此简单,在一个分支中,您有pom.xml

<build>
  <finalName>app-1.0-SNAPSHOT</finalName>
</build>


在其他分支中,您有pom.xml

<build>
  <finalName>1.0-RELEASE</finalName>
</build>

答案 1 :(得分:6)

您可以将项目版本传播到您的构建名称,如下所示:

<build>
    <finalName>app-${project.version}</finalName>
</build>

或您父项目的版本(如果有):

<build>
    <finalName>app-${parent.version}</finalName>
</build>

然后,您将跟踪项目版本而不是构建名称。

然而,请注意使用分支管理SCM中的构建版本是一个痛苦的问题,容易出错。建议你的代码库与你的构建版本无关。

一种可能的替代方法是使用某些版本管理工具,例如maven release plugin,或者更简单的maven version

示例:

在这里,我将使用maven verion给出示例。

假设您正在使用SCM工具(可能是git)和构建工厂(如Jenkins或任何其他工具)。假设你有一个工作来构建和部署快照,另一个工作用于发布

快照作业中,您可以使用以下maven目标设置预构建任务:

versions:set -DnewVersion=app-1.0-SNAPSHOT

以及发布作业中的以下内容:

versions:set -DnewVersion=app-1.0-RELEASE

现在这样做是可以的,因为您只在本地执行此操作,而无需在代码中管理构建版本。

现在,您可以在应用maven version并成功构建(希望包括单元,集成和功能测试)之后标记您的(发布)版本。这样,您可以准确跟踪每个版本上已部署的代码。

提示!! 空间就是金钱!帮自己一个忙:定期清理快照存储库。创建一个偶尔这样做的工作应该不会很困难。

答案 2 :(得分:4)

您可以使用Maven引导插件指定工件名称:

在这种情况下,它将是NewJarName.jar

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <finalName>NewJarName</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>