jenkins maven在构建后更改jar文件名

时间:2015-01-29 21:06:21

标签: maven jenkins

我的jars是通过ssh远程安装的,重要的是我知道安装了哪个版本。这不是通过我目前在pom.xml中使用版本号来实现的,因为这个号码是手动更新的。 我希望能做什么,不能找到一个体面的插件或一个明确的告诉我。 Jenkins应该在pom文件中构建rev一个内部版本号(例如1.0.3。或1.0.3-或1.0.3_或者只是一个名为内部版本号的附加属性)将这个内部版本号作为jar名称的一部分会很好这样很容易区分等。) 有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这个post描述了在Maven项目中使用Jenkins内部版本号的方法。但是有一些必要的调整可以满足您的要求。

  1. 在pom.xml
  2. 中定义内部版本号的属性
    <properties>
        <build.number></build.number>
    </properties>
    

    该属性应具有空值默认值。如果未指定内部版本号(作为Java系统属性),则jar的名称通常为$ {artifactId} - $ {version} .jar,例如myartifact-0.0.1-SNAPSHOT.jar

    1. 指定构建的最终名称
    2. <build>
        <finalName>${artifactId}-${version}${build.number}</finalName>
      </build>
      

      最终名称现在将包含内部版本号作为后缀。例如:myartifact-0.0.1-SNAPSHOT-153.jar(请注意,构建号之前的连字符必须是系统属性的一部分 - 请参阅下一步)

      1. 在Maven命令中使用Jenkins environment variable设置系统属性 build.number
      2.  mvn clean install -Dbuild.number=-${BUILD_NUMBER}
        

        请注意,编号前的连字符!

答案 1 :(得分:1)

Maven 3.2.1开始,您可以在版本中定义属性,如下所示:${revision}, ${changelist}, and ${sha1}

  <groupId>com.soebes.examples.j2ee</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.4-${revision}-SNAPSHOT</version>

这是一个解决方案。

您还可以将所有需要的信息放入MANIFEST.MF文件中,这样您就可以确切地说出安装了哪个版本。在那里,您可以使用svn版本号或git sha1以及补充内容,例如CI解决方案的内部版本号。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>${maven-jar-plugin.version}</version>
  <configuration>
    <archive>
      <addMavenDescriptor>true</addMavenDescriptor>
      <index>true</index>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
      </manifest>
      <manifestEntries>
        <artifactId>${project.artifactId}</artifactId>
        <groupId>${project.groupId}</groupId>
        <version>${project.version}</version>
        <revision>${svn.revision}</revision>
        <build-number>${BUILD_NUMBER}</build-number>
        <build-id>${BUILD_ID}</build-id>
        <build-time>${maven.build.timestamp}</build-time>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

答案 2 :(得分:0)

虽然Maven没有设计这个功能,因为不应该考虑VCS提交的每个构建,因为要释放的构建的稳定性。但是有一个使用插件的工作。我不建议使用内部版本编号进行版本构建,而是将此实践与版本一起使用。

在POM文件中添加:

第1步:按如下方式配置SCM

'<scm>
<connection>scm:git/svn:repositary location</connection>
<url>similar</url>
</scm>
--
--
<build>
--
--
<plugins>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.9.2</version>
        <configuration>
          <connectionType>connection</connectionType>
        </configuration>
      </plugin>'

**第2步:使用BuildNumber插件**

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.3</version>

        <executions>
          <execution>
        <phase>validate</phase>

            <goals>
              <goal>create</goal>
            </goals>
            <configuration>

        <format>{0,date,yyyy-MM-dd_HH-MM}</format>
          <items>
            <item>timestamp</item>
          </items>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>

第3步:

<finalName>webapp-demo-${buildNumber}</finalName>

$ {buildNumber}可以是时间戳或变更集/修订版。这完全取决于你的需要。 Tutorial