Spring Boot控制目标JAR文件名

Ido*_*ash 14 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>
Run Code Online (Sandbox Code Playgroud)

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

我可以这样做吗?

nhu*_*uvy 26

就这么简单,在一个分支,你必须pom.xml

<build>
  <finalName>app-1.0-SNAPSHOT</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)


在其他的分支,你必须pom.xml

<build>
  <finalName>1.0-RELEASE</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)


sen*_*982 15

您可以使用 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>
Run Code Online (Sandbox Code Playgroud)


avi*_*rat 9

您可以像这样将项目的版本传播到您的内部版本名称:

<build>
    <finalName>app-${project.version}</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)

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

<build>
    <finalName>app-${parent.version}</finalName>
</build>
Run Code Online (Sandbox Code Playgroud)

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

但是,请注意,使用分支机构在SCM中管理构建版本很麻烦,而且容易出错。强烈建议您的代码存储库与您的构建版本无关。

一种可能的替代方法是使用某些发行管理工具,例如maven release plugin,甚至更为简单maven version

例:

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

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

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

versions:set -DnewVersion=app-1.0-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)

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

versions:set -DnewVersion=app-1.0-RELEASE
Run Code Online (Sandbox Code Playgroud)

现在可以执行此操作,因为您只需要在本地进行操作,而不必在代码中管理构建版本。

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

小费!!空间就是金钱!帮个忙:定期清理快照存储库。创建一个偶尔做一次的工作并不难。