在 Eclipse 中运行时从 pom 获取 maven 项目版本和工件 ID

2022-09-01 02:52:20

当我在运行时遇到这个问题时,我正在查找如何从maven pom或清单中获取应用程序名称(工件ID)和版本 在运行时获取Maven工件版本

当我打包项目时,上述内容适用于我,但是当我尝试使用eclipse运行程序时,我似乎无法使任何内容正常工作。我在构建时尝试使用.properties方法,因为我假设它不依赖于包,但我仍然没有得到结果。如果有人对这个问题有想法或解决方案,将不胜感激。

我的最后一次尝试如下。这将在打包时使用清单(有效),并在 eclipse 中运行时尝试获取 .properties 文件。

String appVersion = getClass().getPackage().getImplementationVersion();
    if(appVersion == null || "".equals(appVersion)) {
        appVersion = Glob.getString(appVersion);
        if(appVersion == null || "".equals(appVersion)) {
            System.exit(0);
        }
    }

答案 1

创建属性文件

src/main/resources/project.properties

包含以下内容

version=${project.version}
artifactId=${project.artifactId}

现在打开 maven 资源筛选

  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>

以便将此文件处理为

target/classes/project.properties

有一些与此类似的内容

version=1.5
artifactId=my-artifact

现在,您可以读取此属性文件以获取所需的内容,这应该每次都有效。

final Properties properties = new Properties();
properties.load(this.getClassLoader().getResourceAsStream("project.properties"));
System.out.println(properties.getProperty("version"));
System.out.println(properties.getProperty("artifactId"));

答案 2

现在,使用 maven 4 的一个简单解决方案是在包中添加一个静态方法:VersionUtil

package my.domain.package;
public class VersionUtil {
  public static String getApplicationVersion(){
    String version = VersionUtil.class.getPackage().getImplementationVersion();
    return (version == null)? "unable to reach": version;
  }
}

问题是你需要在项目的pom中加入这个“mave-war-plugin”,说你想添加:addDefaultImplementationEntries

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
     ...
      <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <archive>
                    <manifest>
                        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    ...

然后从代码中的某个位置调用 。VersionUtil.getApplicationVersion()


推荐