Details
Description
The What
My understanding is that the pomPropertiesFile configuration element will allow you to override the default pom.properties file that is created by the maven-archiver when addMavenDescriptor is true. I wanted to use this feature to include some Hudson build data into the pom.properties file. We already have utility classes that read version information from this file, so it wasn't a leap to add some build-server information to this same file.
From the Maven Archiver Reference page:
pomPropertiesFile Use this to override the auto generated pom.properties file (only if addMavenDescriptor is set to true) File 2.3
My Expectations
So my assumption is that I can provide a customized pom.properties file that will be written/copied to the META-INF/maven/" + ${pom.groupId} + "/" + ${pom.artifactId} + "/pom.properties file.
The Actual Result
The File I pass to the pomPropertiesFile element is actually overwritten with the default pom.properties file format. One could say it is overriding my override. Maybe I am misunderstanding this configuration element altogether, I can't see how it can possibly be helpful the way that it is behaving right now...
Background Information
I am witnessing this behaviour with the apache war plugin:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1-beta-1</version> <configuration> <archive> <addMavenDescriptor>true</addMavenDescriptor> <pomPropertiesFile>configurations/custom-pom.properties</pomPropertiesFile> </archive> </configuration> </plugin>
And here is my customized properties file that I want used to replace the default pom.properties content:
version=$\{pom.version\} groupId=$\{pom.groupId\} artifactId=$\{pom.artifactId\} buildTag=${BUILD_TAG} buildNumber=${BUILD_NUMBER} buildId=${BUILD_ID}
I see from my Maven output that maven-war-plugin-2.1-beta-1 uses maven-archiver-2.4:
... [DEBUG] Plugin dependencies for: org.apache.maven.plugins:maven-war-plugin:2.1-beta-1 are: org.apache.maven:maven-plugin-api:jar:2.0.6:runtime org.apache.maven:maven-artifact:jar:2.0.6:runtime org.apache.maven:maven-archiver:jar:2.4:runtime org.codehaus.plexus:plexus-archiver:jar:1.0-alpha-9:runtime org.codehaus.plexus:plexus-io:jar:1.0-alpha-1:runtime com.thoughtworks.xstream:xstream:jar:1.3.1:runtime org.codehaus.plexus:plexus-utils:jar:1.5.5:runtime org.apache.maven.shared:maven-filtering:jar:1.0-beta-2:runtime ... [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-war-plugin:2.1-beta-1:war' --> [DEBUG] (s) addMavenDescriptor = false [DEBUG] (s) pomPropertiesFile = /SOME_PATH/configurations/custom-pom.properties ...
MavenArchiver#createArchive(...)
I notice that the createArchive(...) method ALWAYS writes the standard/default pom.properties contents to the supplied file. That provides no benefit.
If I can offer a suggestion:
- get the pomPropertiesFile configuration property.
- if the property is not null and the property maps to an existing file
- archiver.addFile( pomPropertiesFile, "META-INF/maven/" + groupId + "/" + artifactId + "/pom.properties" );
- else the file property was null
- Create the temporary maven-archiver folder
- Create a ref to the maven-archiver/pom.properties file
- Call PomPropertiesUtil#createPomProperties
- if the property is not null and the property maps to an existing file