【问题标题】:Getting application version from pom从 pom 获取应用程序版本
【发布时间】:2014-01-29 11:12:24
【问题描述】:

我有一个用于返回应用程序信息的休息端点(目前只有应用程序版本) 但到目前为止,这些信息是硬编码的,很容易忘记更改它。 我会更好地从 pom 或清单文件中检索应用程序版本。有没有项目带来这样的功能?

【问题讨论】:

  • 你是说构建版本吗?如果是,那么只需在 POM 中添加 1.0.0
  • 我认为他的意思是他如何在运行时阅读该版本...stackoverflow.com/questions/2712970/…
  • 是的,我想从 pom 中读取当前版本( 标签的值)并在 java 代码中使用它。我想以简单优雅的方式来做这件事
  • 看看here。

标签: java spring maven versioning


【解决方案1】:

Spring Boot 可以引用 pom.xml 中定义的项目版本,并使用 Actuator 将其通过 REST 公开:

# application.properties
endpoints.info.enabled=true
info.app.version=@project.version@

然后访问 /info URL(例如http://localhost:8080/info)将返回:

{"app": {"version": "<major.minor.incremental>"}}

另见:spring boot/spring web app embedded version number

【讨论】:

    【解决方案2】:

    你最好使用内置清单。

    new Manifest(Application.class.getResourceAsStream("/META-INF/manifest.mf"))
    

    对于具体的实现版本:

    new Manifest(Application.class.getResourceAsStream("/META-INF/manifest.mf"))
                .getMainAttributes()
                .get(Attributes.Name.IMPLEMENTATION_VERSION)
    

    使用 maven 不要忘记使用以下方法创建清单:

    <?xml version="1.0" encoding="UTF-8"?>
    <project>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    【讨论】:

    • 这对我的pring-boot应用程序不起作用。清单已找到,但属于我项目的一个库
    • 一直在寻找解决方案。谢谢,完美运行!
    【解决方案3】:

    有一个很棒的项目名为Appinfo,请使用它并享受它! (它有一个丑陋的页面,我知道 - 但它有效 :)

    AppInfo 允许自动为您的应用程序提供当前版本号、构建日期或构建号。


    同样出色的Spring Boot Actuator 提供名为Info Endpoint 的功能,可以将版本信息发布到Web 或REST。

    默认情况下,Actuator 添加一个 /info 端点到主服务器。它包含来自 git.properties 的提交和时间戳信息(如果该文件存在)以及它在环境中找到的带有前缀“info”的任何属性。

    【讨论】:

      【解决方案4】:

      您可以使用 maven 的 resource filtering 或类似 maven-substitute-plugin 的东西。

      【讨论】:

      • 是的,但是如何将过滤与 REST 集成? :)
      • 使用 Maven 构建项目时,请求的版本信息将进入某个文件(再次以某种方式“硬编码”,但在构建项目之前由 maven 的资源预处理器设置) - 比如一个属性文件或直接在 Java 类中,...应用程序可以使用此信息然后在 REST 请求上返回它。我错过了什么吗?
      • 这是真的,但有一些工具可以更轻松地做到这一点。
      • 好的,“手动”执行此操作听起来并不难。但这听起来很有趣。感谢您的提示。
      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2018-01-12
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多