使用 maven 将版本号输出到文本文件

2022-08-31 14:39:49

我想生成一个zip文件,该文件将使用maven更新应用程序。zip将托管在服务器上,我正在使用汇编插件来生成zip。但是,我希望maven自动生成一个文本文件,该文件将当前版本号存储在zip之外。这怎么可能?

编辑:我成功地使用maven Assembly插件和两个描述符创建了两个自定义程序集。一个有一个目录单一的目标,它只是创建一个基于过滤的更新版本的文件夹.txt。然后另一个只有一个目标的人实际上打包了zip文件。这似乎非常不优雅,我想它不会使用整个更新的文件夹正确更新maven存储库。如果有更好的方法可以做到这一点,请告诉我。


答案 1

确定。在 src/main/resources 中的某个位置创建一个文本文件,调用它(或其他)version.txt

文件内容:

${project.version}

现在在你的pom.xml,在构建元素里面,把这个块:

<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
      <includes>
        <include>**/version.txt</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>false</filtering>
      <excludes>
        <exclude>**/version.txt</exclude>
      </excludes>
    </resource>
    ...
  </resources>
</build>

每次构建后,文件(您可以在目标/类中找到)将包含当前版本。

现在,如果你想自动将文件移动到其他地方,你可能需要通过maven-antrun-plugin执行一个ant任务。

像这样:

  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
         <version>1.4</version>
         <executions>
          <execution>
            <phase>process-resources</phase>
            <configuration>
               <tasks>
                 <copy file="${project.build.outputDirectory}/version.txt"
                   toFile="..." overwrite="true" />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
   </plugins>
 </build>

答案 2

使用标准(然后您可以使用Java代码来获取版本)META-INF\MANIFEST.MFgetClass().getPackage().getImplementationVersion()

对于 .war,请使用以下配置:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <archive>                   
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
        </archive>
    </configuration>
</plugin>

这将在构建期间添加清单,或者您可以调用mvn war:manifest

另请参阅如何在运行Tomcat时获取软件包版本?


推荐