Hi,

On 3/31/15 10:08 PM, Nick Hristov wrote:
Hello,

In my company we have a really large codebase, and it is structured in
over 100 modules.

All modules are released together: they have the same version.

Historically, we have had the version embedded in every pom at least
twice: once for the module itself, and once for the parent version
reference.

>
I believe with a recent upgrade, the number of versions goes
in half: child modules can inherit the version.

Usually you only need the version in the parent element only cause the version is inherited so you can omit the version within the module itself. And best practice is not to define a supplemental version in the child element.


The problem is that we still must put the parent's version in every
module. This leaves us with still over 100 repetitions of version string
in the project.


Obviously we have tools to automate the switching of versions, but this
is still causing us pain.

In which way is it causing pain?

Why not using the existing tools of Maven. First [maven-release-plugin][1] will handle this. If you don't like to use maven-release-plugin you can use [versions-maven-plugin][2]....



Will maven at any point support omitting the <version> from the <parent>
xml element? If <relativePath> is specified, why does a version have to
be present? Wouldn't specifying a version when a <relativePath> is
present lead to two sources of information (i.e. child specifying
version, yet pointing to a parent pom which may have conflicting version)?

The relative path in your examples it not neccessary cause it's the default which you have defined. So you can omit the relativePath from the parent elements.

The point here is. A parent can reference the parent within the reactor but does not need to so that's the reason why you have to give the version as well.

Omitting the version element from the parent could be done only with Maven 4.X but not in Maven 3 cause it would break all existing Maven versions and toolings.



Furthermore, I was able to get to a solution to this problem, but it
appears brittle. A sample project is attached.

The attached sample project also breaks if the version is a constant in
the parent pom.xml. (i.e. <version>1.0-SNAPSHOT</version>) Can't figure
why that is. I am using the following maven version:

mvn --version

Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1;
2014-12-14T09:29:23-08:00)

Maven home: /Development/vendor/apache-maven-3.2.5

Java version: 1.7.0_71, vendor: Oracle Corporation

Java home:
/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"

Thank you for your help,

Based on your used Maven version you can use the following which is part of maven since Maven 3.2.1:

You can define the version using the following [properties][3]:

A simple change to prevent Maven from emitting warnings about versions with property expressions. Allowed property expressions in versions include ${revision}, ${changelist}, and ${sha1}. These properties can be set externally, but eventually a mechanism will be created in Maven where these properties can be injected in a standard way. For example you may want to glean the current Git revision and inject that value into ${sha1}. This is by no means a complete solution for continuous delivery but is a step in the right direction.


[1] http://maven.apache.org/maven-release/maven-release-plugin/
[2] http://mojo.codehaus.org/versions-maven-plugin/
[3] http://maven.apache.org/docs/3.2.1/release-notes.html


Kind regards
Karl Heinz Marbaise

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to