当我们在package一个maven工程的时候,会自动生成一个pom.properties文件,这个文件里面包含了version,artifactid,groupid 等信息。有一个方法可以在运行时去取得这些信息:
程序代码
public class Application {
private String version;
public String getVersion() {
if (version == null) {
String res = "META-INF/maven/myapp/pom.properties";
URL url = Thread.currentThread().getContextClassLoader().getResource(res);
if (url == null) {
version = "SNAPSHOT." + Utils.timestamp();
} else {
Properties props = Utils.loadProperties(res);
version = props.getProperty("version");
}
}
return version;
}
}
仅此而已?当然不是。在默认情况下maven war plugin将把所有的class 文件打包到WEB-INF/classes目录下, 而pom.properties 文件是在META-INF目录下, 他们在同一级目录下, 而不是在 WEB-INF/classes/META-INF 目录下,所以上面的代码是找不到pom.properties 文件的,但是还有解决办法:
那就是修改pom.xml 文件,这样配置:
程序代码
org.apache.maven.plugins
maven-war-plugin
2.6
true
他的作用就是将这些class文件,打成 jar 文件,然后放到 WEB-INF/lib 目录里面去, 同样pom.properties文件也会被打包进去,这样上面的方法就能使用了。这只是其中的方法之一,还有另外一种办法,利用maven的生命周期,在编译之前动态生成java代码。有空再测试.