如何重命名最新快照版本以包含版本号

时间:2016-06-21 14:48:06

标签: maven maven-dependency-plugin

问题:如何重命名文件的快照版本以包含版本号?

我使用<version>LATEST</version>下载最新版本,但如何在<destFileName>中使用它?

${project.dependencies[0].version}为我提供了版本LATEST

<artifactItem>
    <groupId>my.group</groupId>
    <artifactId>my.artifact</artifactId>
    <version>LATEST</version>
    <type>exe</type>
    <overWrite>true</overWrite
    <outputDirectory>target/downloads</outputDirectory>
    <destFileName>${project.dependencies[0].version}_My_File_Name.exe</destFileName>
</artifactItem>

我正在使用Snapshot版本,我想更改文件名以仅包含版本号。 (否则文件名为My_File_Name-version-20160630.212007-10)。

1 个答案:

答案 0 :(得分:4)

您需要在true的配置中将useBaseVersion设置为maven-dependency-plugin

<configuration>
    <artifactItems>
        <artifactItem>
            <groupId>my.group</groupId>
            <artifactId>my.artifact</artifactId>
            <version>LATEST</version>
            <type>exe</type>
            <overWrite>true</overWrite>
            <outputDirectory>target/downloads</outputDirectory>
        </artifactItem>
    </artifactItems>
    <useBaseVersion>true</useBaseVersion>
</configuration>

此参数是在插件的2.7版本中引入的。

A bit of explanation,以工件org.springframework.batch:spring-batch-admin-manager为例。当您使用"LATEST"作为依赖项中的版本时,Maven将从配置的名为maven-metadata.xml的远程存储库中获取文件。此文件包含为依赖项groupId:artifactId部署的所有版本的信息。

这是此类文件的示例

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>org.springframework.batch</groupId>
  <artifactId>spring-batch-admin-manager</artifactId>
  <versioning>
    <latest>1.3.2.BUILD-SNAPSHOT</latest> <!-- This is the LATEST to use! -->
    <release></release>
    <versions>
      <version>1.3.1.BUILD-SNAPSHOT</version>
      <version>1.3.2.BUILD-SNAPSHOT</version>
    </versions>
    <lastUpdated>20150122163642</lastUpdated>
  </versioning>
</metadata>

其中,它声明了<latest>元素中的最新版本。在这种情况下,最新版本为1.3.2.BUILD-SNAPSHOT

但是,这是一个SNAPSHOT版本,这意味着同一1.3.2.BUILD-SNAPSHOT实际上可以有多个快照版本。它们在文件名末尾的Maven 3 by adding a timestamp中有区别。因此,您可以拥有多个具有不同时间戳的1.3.2-SNAPSHOT

现在Maven知道1.3.2.BUILD-SNAPSHOT是要考虑的那个,它会查找特定于1.3.2.BUILD-SNAPSHOT的另一个maven-metadata.xml,即:

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>org.springframework.batch</groupId>
  <artifactId>spring-batch-admin-manager</artifactId>
  <version>1.3.2.BUILD-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20150115.230511</timestamp>  <!-- This is the timestamp to use! -->
      <buildNumber>1</buildNumber>
    </snapshot>
    <lastUpdated>20150122163642</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <extension>jar</extension>
        <value>1.3.2.BUILD-20150115.230511-1</value>
        <updated>20150115230511</updated>
      </snapshotVersion>
      <!-- omitted for brevity -->
  </versioning>
</metadata>

此文件特别声明<timestamp>元素内部署的快照版本的最新时间戳。 Maven将使用并下载这个带时间戳的工件。

最后:

  • 基本版本将对应于工件的SNAPSHOT版本1.3.2.BUILD-SNAPSHOT - 在此示例中;
  • 该版本将对应于此示例中最新快照的时间戳版本1.3.2.BUILD-20150115.230511-1

因此,useBaseVersion将允许输出没有时间戳的文件。处理发布版本而不是快照版本时,两者都是相同的。