我可以从我的 pom 文件中获取一些变量的值,即:
${project.version}
我正在开发一个自定义的 Maven 插件,我可以用表达式设置它,但我不想要它。如何像我的 pom 文件一样在 Java 方法中获取它?
PS: System.getProperty("project.version") 不起作用,我应该找到一个通用的解决方案,因为我也会在其他事情上使用它,例如获取竹子内部版本号等。
我可以从我的 pom 文件中获取一些变量的值,即:
${project.version}
我正在开发一个自定义的 Maven 插件,我可以用表达式设置它,但我不想要它。如何像我的 pom 文件一样在 Java 方法中获取它?
PS: System.getProperty("project.version") 不起作用,我应该找到一个通用的解决方案,因为我也会在其他事情上使用它,例如获取竹子内部版本号等。
我在我的 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");
}
@Component
MavenProject project;
...
project.getVersion()
假设您使用的是Java 5 注释
您是在问是否可以一次将参数作为类或其他结构传递?
如果是这样,您可以使用 -D 参数将它们作为系统属性文件传递,并使用 System.getProperties() 将它们从另一端取出。谷歌周围,很多项目都支持这样的阅读设置,那里有很多示例代码。
我创建了一个属性文件并在我的 pom 中指出:
<build>
<resources>
<resource>
<directory>src/main/resources/</directory>
<filtering>true</filtering>
</resource>
...
</build>