繁体   English   中英

如何像Pom一样从Java方法获取Maven项目版本

[英]How to Get Maven Project Version From Java Method as Like at Pom

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

${project.version}

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

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

我在Web项目中通过使用maven-war-plugin将版本注入到清单中,然后使用一些Java代码从那里获得它来做到这一点。 我认为没有理由为什么非Web项目无法完成类似的工作。

例如

<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");
}
@Component
MavenProject project;

...

    project.getVersion()

假设您正在使用Java 5批注

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

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

我已经创建了一个属性文件,并在pom上指出了这一点:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM