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

新手上路,请多包涵

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

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

原文由 sanz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

当然。在 src/main/resources 的某处创建一个文本文件,将其命名为 version.txt (或其他名称)

文件内容:

 ${project.version}

现在在你的 pom.xml 中,在 build 元素内,放置这个块:

 <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>

原文由 Sean Patrick Floyd 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用标准 META-INF\MANIFEST.MF (然后你可以使用Java代码 getClass().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 时获取包版本?

原文由 Paul Verest 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题