maven打包,在manifest.mf里面加入时间戳
我不得不再次痛恨一番maven,用起来真是恶心:
今天遇到这么个问题,我想在war包里面的manifest.mf文件中加入时间戳。怎么写pom?
首先maven文档说,可以用那个maven-antrun-plugin来加入时间啊,照着它说的做:
http://maven.apache.org/plugin-developers/cookbook/add-build-time-to-manifest.html (不推荐)
打jar包倒没问题,可我要打war包就不行了。
然后看到这么个插件buildnumber-maven-plugin:
需要添加配置:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <executions> <execution> <phase>validate</phase> <goals> <goal>create</goal> </goals> </execution> </executions> <configuration> <format>{0,date,yyyyMMdd-HHmmss}</format> <items> <item>timestamp</item> </items> <buildNumberPropertyName> current.timestamp </buildNumberPropertyName> </configuration> </plugin>
然后在maven-war-plugin中添加入口:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>xxxxx</warName> <archive> <manifestEntries> <Project-name>${project.name}</Project-name> <Project-version> ${project.version} </Project-version> <Build-Time> ${current.timestamp} </Build-Time> </manifestEntries> </archive>
……
java.lang.NullPointerException: The scm url cannot be null. at org.apache.maven.scm.manager.AbstractScmManager.makeScmRepository(AbstractScmManager.java:183)
查了查,说是要加个没用的scm节点才行:
<scm> <connection>scm:svn:http://127.0.0.1/none</connection> <developerConnection> scm:svn:https://127.0.0.1/none </developerConnection> <tag>HEAD</tag> <url>http://127.0.0.1/isaynone</url> </scm>
这里面的url都是无用,瞎写都可以。直接复制过去也可。
这样就可以加入时间戳到manifest.mf里面去了。
不过我真服了这样的解决办法。maven有多恶心就多恶心了!
----------
这里补充一下jar包的情形:
不要使用官方http://maven.apache.org/plugin-developers/cookbook/add-build-time-to-manifest.html
这个办法容易遇到m2e的老问题 http://ljhzzyx.blog.163.com/blog/static/383803122013440345857/
所以还是推荐使用buildnumber-maven-plugin的方式,大部分一样针对maven-jar-plugin修改
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifestEntries>
<Copyright>kzg 2013</Copyright>
<Project-name>${project.name}</Project-name>
<Project-version>${project.version}</Project-version>
<Build-Time>${current.timestamp}</Build-Time>
</manifestEntries>
</archive>
<skip>true</skip>
</configuration>
</plugin>
还有个方法:
http://m.oschina.net/blog/95181