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

时间:2013-02-07 20:44:31

标签: java maven maven-plugin-development

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

${project.version}

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

PS: System.getProperty(“project.version”)不起作用,我应该找到一个通用的解决方案,因为我也会在其他方面使用它,即获取竹编号等。< / p>

4 个答案:

答案 0 :(得分:3)

我在我的web项目中通过使用maven-war-plugin将版本注入清单,然后使用一些Java代码从那里获取它。我认为没有理由不能用非网络项目做类似的事情。

E.g。

<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");
}

答案 1 :(得分:2)

@Component
MavenProject project;

...

    project.getVersion()

假设您使用的是Java 5 annotations

答案 2 :(得分:0)

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

如果是这样,您可以使用-D arguement将它们作为系统属性文件传递,并使用System.getProperties()将它们移出另一端。谷歌周围,很多项目支持阅读设置就像这样,那里有很多示例代码。

答案 3 :(得分:-1)

我已经创建了一个属性文件并在我的pom上显示:

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