【问题标题】:How to Get Maven Project Version From Java Method as Like at Pom如何从 Java 方法获取 Maven 项目版本,就像在 Pom 中一样
【发布时间】:2013-02-07 20:44:31
【问题描述】:

我可以从我的 pom 文件中获取一些变量的值,即:

${project.version}

我正在开发一个自定义的 maven 插件,我可以用表达式设置它,但我不想要它。如何像我的 pom 文件一样在 Java 方法中获取它?

PS: System.getProperty("project.version") 不起作用,我应该找到一个通用的解决方案,因为我也会在其他事情上使用它,例如获取竹内部版本号等。

【问题讨论】:

  • 很抱歉,我没有收到您的问题。你需要什么样的参数?
  • 实际上有一个guide 用于插件开发。注释让您可以在插件类中从项目中获取任何属性。
  • @AndrewLogvinov 我想以通用方式检索,我已经编辑了我的问题。

标签: java maven maven-plugin-development


【解决方案1】:

我创建了一个属性文件并在我的 pom 中指出:

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

【讨论】:

    【解决方案2】:
    @Component
    MavenProject project;
    
    ...
    
        project.getVersion()
    

    假设您使用的是Java 5 annotations

    【讨论】:

      【解决方案3】:

      我在我的 Web 项目中使用 maven-war-plugin 将版本注入清单中,然后使用一些 Java 代码从那里获取它。我看不出为什么不能用非网络项目完成类似的事情。

      例如

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          version>2.4</version>
          <configuration>
              <archive>
                  <manifest>
                      <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                  </manifest>
              </archive>
          </configuration>
      </plugin>
      

      那么在Java中(不包括错误处理):

      public String getMavenVersion(ServletContext ctx) {
          String appServerHome = ctx.getRealPath("/");
          File manifestFile = new File(appServerHome, "META-INF/MANIFEST.MF");
      
          Manifest mf = new Manifest();
      
          mf.read(new FileInputStream(manifestFile));
      
          Attributes atts = mf.getMainAttributes();
      
          return atts.getValue("Implementation-Build");
      }
      

      【讨论】:

      【解决方案4】:

      您是在问是否可以一次将参数作为类或其他结构传递?

      如果是这样,您可以使用 -D 参数将它们作为系统属性文件传入,并使用 System.getProperties() 将它们从另一端取出。 Google 周围,很多项目都支持这样的阅读设置,那里有很多示例代码。

      【讨论】:

        猜你喜欢
        • 2012-04-11
        • 2012-05-23
        • 2010-12-02
        • 2011-07-12
        • 2014-12-20
        • 2016-02-16
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多