-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
Powered by SuggestiMate
Since Maven 2.1 it is possible to control the format of the maven.build.timestamp property by setting the maven.build.timestamp.format property. This works correctly with mvn version 3.0.3:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>invalid.example.test</groupId> <artifactId>test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssZ</maven.build.timestamp.format> <build.timestamp>${maven.build.timestamp}</build.timestamp> </properties> <build> <resources> <resource> <directory>src/main/filtered-resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
Build-Timestamp: ${build.timestamp}
Build-Timestamp: 2011-05-15T18:56:20+1000
but in Jenkins 1.411 the default timestamp format is used instead:
Build-Timestamp: 20110515-1857
[JENKINS-9693] maven.build.timestamp.format is not obeyed in maven builds
So if maven.build.timestamp.format is ignored, is there another way to specify a custom timestamp format? I am running maven 3.0.3, Jenkins 1.428 and it is still not honoring maven.build.timestamp.format. Thanks.
I too, need to find a way to honor the timestamp format as the default breaks the build as I cannot have "-" in the format. Works fine in maven outside of jenkins though.
I have the same problem as Jason, broken builds when building with Jenkins. Has anyone found a work-around?
There is a work-around using a Groovy snippet here...
http://stackoverflow.com/questions/802677/adding-the-current-date-with-maven2-filtering
Whilst not being particularly elegant, at least my builds are now working, which is always a plus! So a thanks to romaintaz for this.
The most disturbing part of this is that the build(s) work differently in Jenkins then they do simply running on the command-line. Not a very good thing if you are trying to have consistent and reproducible builds.
I have to agree with Jason Chaffee. While it is mostly just annoying, it begs the question: If this doesn't work as a command line build using Maven, what else might be different?
I wound up creating this timestamp via the Codehaus Build Number plugin (http://mojo.codehaus.org/buildnumber-maven-plugin/create-timestamp-mojo.html). Here is the Maven config that I used (in my plugin dependency management):
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>1.0</version> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>create-timestamp</goal> </goals> </execution> </executions> <configuration> <timestampFormat>yyyyMMddHHmmssSSS</timestampFormat> <timestampPropertyName>releaseTimestamp</timestampPropertyName> </configuration> </plugin>
Am I correct that the reason this was not fixed already is that the point in the maven lifecycle where the statically formatted timestamp is created, the pom file(s) have not been evaluated. As such, it does not have access to this property (maven.build.timestamp.format) and so does not know that the user has defined it? If that is true, is there something else that can be used in Jenkin's Maven integration that can get access to this property and use it correctly?
Thanks!
Allen
All of the above workarounds provide different timestamps in each module in a multi-module build. The only thing I managed to get working was the following code:
<plugin> <groupId>com.github.goldin</groupId> <artifactId>timestamp-maven-plugin</artifactId> <executions> <execution> <id>set-specific-timestamp</id> <goals> <goal>timestamp</goal> </goals> <phase>initialize</phase> <configuration> <time>{{ def newdate = null; try { newdate = Date.parse( "${maven.build.timestamp.format}", "${maven.build.timestamp}"); } catch (java.text.ParseException e) { newdate = Date.parse( "yyyyMMdd-HHmm", "${maven.build.timestamp}"); println "THANKS JENKINS, FOR JENKINS-9693"; } newdate }}</time> <timestamp> <property>actual-timestamp</property> <pattern>${maven.build.timestamp.format}</pattern> </timestamp> </configuration> </execution> </executions> </plugin>
...and then use actual-timestamp as your timestamp property.
This assumes you already have maven.build.timestamp.format set as a property.
Note that you can put whatever pattern you want in the <pattern> field, in this case it just formats it the way you originally wanted it
Also note that this will only reach minute resolution on Jenkins builds since that's what Jenkins munges it to.
I migrate from Hudson to Jenkins and now I have this bug. In hudson work's fine.
Fixed this issue in the maven-interceptors project. (https://github.com/jenkinsci/maven-interceptors/pull/2).
We need to release a new version of that project and update the maven-plugin project so it uses that new version.
My $.02 it would be useful to have this fixed. Inconsistencies between maven on the command line and via Jenkins !good.
Code changed in jenkins
User: Ron Bierman
Path:
maven-agent/src/main/java/hudson/maven/agent/Main.java
maven3-agent/src/main/java/org/jvnet/hudson/maven3/agent/Maven3Main.java
maven3-interceptor/src/main/java/org/apache/maven/cli/DefaultMavenExecutionRequestBuilder.java
pom.xml
http://jenkins-ci.org/commit/maven-interceptors/021aba7769f46965103686b4ab01de5dcadc0530
Log:
Fixed issue: JENKINS-9693
Removed the call to request.getProjectBuildingRequest() because this call creates a new ProjectBuildingRequest object and set's the BuildStartTime null.
Maven takes care of this by it self later.
Modified repository location in the pom.xml.
Code changed in jenkins
User: Ron Bierman
Path:
.gitignore
maven-agent/pom.xml
maven-agent/src/main/java/hudson/maven/agent/Main.java
maven-interceptor/pom.xml
maven3-agent/.gitignore
maven3-agent/pom.xml
maven3-agent/src/main/java/org/jvnet/hudson/maven3/agent/Maven3Main.java
maven3-agent/src/main/java/org/jvnet/hudson/maven3/agent/RealFilterOutputStream.java
maven3-agent/src/main/resources/org/jvnet/hudson/maven3/agent/classworlds.conf
maven3-interceptor-commons/pom.xml
maven3-interceptor-commons/src/main/java/org/apache/maven/cli/MavenExecutionRequestBuilder.java
maven3-interceptor-commons/src/main/java/org/apache/maven/cli/MavenExecutionRequestsBuilderException.java
maven3-interceptor-commons/src/main/java/org/jvnet/hudson/maven3/listeners/HudsonMavenExecutionResult.java
maven3-interceptor-commons/src/main/java/org/jvnet/hudson/maven3/listeners/MavenProjectBuildResult.java
maven3-interceptor-commons/src/main/java/org/jvnet/hudson/maven3/listeners/MavenProjectInfo.java
maven3-interceptor/.gitignore
maven3-interceptor/pom.xml
maven3-interceptor/src/main/java/org/apache/maven/cli/DefaultMavenExecutionRequestBuilder.java
maven3-interceptor/src/main/java/org/apache/maven/cli/MavenExecutionRequestBuilder.java
maven3-interceptor/src/main/java/org/apache/maven/cli/MavenExecutionRequestsBuilderException.java
maven3-interceptor/src/main/java/org/jvnet/hudson/maven3/launcher/Maven3Launcher.java
maven3-interceptor/src/main/java/org/jvnet/hudson/maven3/listeners/HudsonMavenExecutionResult.java
maven3-interceptor/src/main/java/org/jvnet/hudson/maven3/listeners/MavenProjectBuildResult.java
maven3-interceptor/src/main/java/org/jvnet/hudson/maven3/listeners/MavenProjectInfo.java
maven31-agent/pom.xml
maven31-agent/src/main/java/jenkins/maven3/agent/Maven31Agent.java
maven31-agent/src/main/java/jenkins/maven3/agent/Maven31Main.java
maven31-agent/src/main/java/jenkins/maven3/agent/RealFilterOutputStream.java
maven31-agent/src/main/resources/jenkins/maven3/agent/classworlds.conf
maven31-interceptor/pom.xml
maven31-interceptor/src/main/java/org/apache/maven/cli/DefaultMavenExecutionRequestBuilder.java
maven31-interceptor/src/main/java/org/jvnet/hudson/maven3/launcher/Maven31Interceptor.java
maven31-interceptor/src/main/java/org/jvnet/hudson/maven3/launcher/Maven31Launcher.java
pom.xml
http://jenkins-ci.org/commit/maven-interceptors/7005329394fb515a70b6aa4a37e45167fefda86a
Log:
Merge branch 'master' into JENKINS-9693
Conflicts:
maven-agent/src/main/java/hudson/maven/agent/Main.java
maven3-agent/src/main/java/org/jvnet/hudson/maven3/agent/Maven3Main.java
Code changed in jenkins
User: Christoph Kutzinski
Path:
maven3-interceptor/src/main/java/org/apache/maven/cli/DefaultMavenExecutionRequestBuilder.java
http://jenkins-ci.org/commit/maven-interceptors/8b8c85a5fad5900a09b78e6cc5603e9d580fd89a
Log:
Merge pull request #2 from rbierman/JENKINS-9693
[Fixed JENKINS-9693] maven.build.timestamp.format is not obeyed in maven builds
Compare: https://github.com/jenkinsci/maven-interceptors/compare/142041fa53ce...8b8c85a5fad5
Code changed in jenkins
User: Christoph Kutzinski
Path:
pom.xml
http://jenkins-ci.org/commit/maven-plugin/dae6ef31fc5152d65f5543f61f1c911fcb0dbd38
Log:
[Fixed JENKINS-9693] maven.build.timestamp.format is not obeyed in maven
builds (integrate maven-interceptors 1.5)
Compare: https://github.com/jenkinsci/maven-plugin/compare/d73f82ed2a23...dae6ef31fc51
There is a commit by @kutzi claiming to fix this; should this still be open?
After updating to the latest version of Jenkins, this issue appears to be fixed.
Presumably related to
JENKINS-8573, where it looks like the "fix" was to manually interpolate the maven.build.timestamp property in Jenkins, thereby skipping all of maven's usual handling for it.