Hi everyone,

I have a nested, multi-module project in which every module's pom
inherits from a root pom. I'd like to find a way to avoid duplicating
the parent pom version number in every submodule. The aim is to keep
the version number for these submodules in sync with one another, from
one release to the next. Here's a strategy I've tried using
profiles.xml that doesn't quite work.

profiles.xml:
==========

<profilesXml>
  <profiles>
    <profile>
      <id>projectProfile</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
         <!-- This is the property injection I'm having trouble with: -->
         <rootVersion>1.0.2</rootVersion>
      </properties>
    </profile>
  </profiles>
</profilesXml>


pom.xml (root):
============

<?xml version="1.0" encoding="UTF-8"?>
<project 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>com.myorg</groupId>
  <artifactId>root</artifactId>
  <name>Root</name>
  <version>${rootVersion}</version>
  <packaging>pom</packaging>
  <modules>
    <module>util</module>
  </modules>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.springframework.version>3.0.2.RELEASE</org.springframework.version>
    <servlet.api.version>2.5</servlet.api.version>
    <log4j.version>1.2.16</log4j.version>
    <junit.version>3.8.1</junit.version>
    <httpclient.version>3.1</httpclient.version>
    <dnsjava.version>2.0.6</dnsjava.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <encoding>UTF-8</encoding>
          <debug>true</debug>
          <showDeprecation>true</showDeprecation>
          <showWarnings>true</showWarnings>
          <compilerArgument>-Xlint</compilerArgument>
          <compilerArguments>
            <Xmaxerrs>10000000</Xmaxerrs>
            <Xmaxwarns>10000000</Xmaxwarns>
          </compilerArguments>
          <verbose/>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <forkMode>pertest</forkMode>
          <argLine>-Xms256m -Xmx1024m</argLine>
          <testFailureIgnore>false</testFailureIgnore>
          <skip>false</skip>
          <includes>
            <include>**/*Test.java</include>
          </includes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>


util/pom.xml:
==========
<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>
  <parent>
    <artifactId>root</artifactId>
    <groupId>com.myorg</groupId>
    <version>${rootVersion}</version>
  </parent>

  <artifactId>util</artifactId>
  <name>Common Utilities</name>
  <packaging>jar</packaging>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>

  </dependencies>
</project>


================================

On mvn install'ing from the root directory of the project here's the
directory I get:

% tree ~/.m2/repository/com/myorg
myorg/
|-- root
|   |-- 1.0.2
|   |   `-- root-1.0.2.pom
|   `-- maven-metadata-local.xml
`-- util
    |-- ${rootVersion}
    |   |-- util-${rootVersion}.jar
    |   `-- util-${rootVersion}.pom
    `-- maven-metadata-local.xml

Note that ${rootVersion} was not transformed to 1.0.2.  Also, here's
what's inside the root pom file after it's been installed:

% cat ~/m2/repository/com/myorg/root/1.0.2/root-1.0.2.pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocatio
n="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd";>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.myorg</groupId>
  <artifactId>root</artifactId>
  <name>Root</name>
  <version>${rootVersion}</version>   <!-- why wasn't 1.0.2 injected here? -->
  <packaging>pom</packaging>
  <modules>
    <module>util</module>
  </modules>
  ..

And here's the directory structrure I was hoping to get:

myorg/
|-- root
|   |-- 1.0.2
|   |   `-- root-1.0.2.pom
|   `-- maven-metadata-local.xml
`-- util
    |-- 1.0.2
    |   |-- util-1.0.2.jar
    |   `-- util-1.0.2.pom
    `-- maven-metadata-local.xml





Any insights as to how I should approach this?

-Babak

PS This email is somewhat related to
http://www.mail-archive.com/users@maven.apache.org/msg113594.html
There, the concern is to avoid duplicating version numbers for
dependent artifacts: here the concern is to avoid duplicating the
version number of the parent POM.
Started this new thread in order to disambiguate these 2 related but
still separate issues.

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

Reply via email to