3

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

${project.version}

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

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

4

4 回答 4

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");
}
于 2014-09-25T14:01:40.683 回答
2
@Component
MavenProject project;

...

    project.getVersion()

假设您使用的是Java 5 注释

于 2013-02-08T19:24:45.937 回答
0

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

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

于 2013-02-07T21:01:25.430 回答
0

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

<build>
    <resources>
        <resource>
            <directory>src/main/resources/</directory>
            <filtering>true</filtering>
        </resource>
 ...
</build>
于 2013-02-08T07:06:59.320 回答