You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Benjamin Bentmann (JIRA)" <ji...@codehaus.org> on 2010/10/18 23:32:32 UTC

[jira] Updated: (MNG-4869) Warn when relativePath points at parent POM with different version

     [ http://jira.codehaus.org/browse/MNG-4869?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benjamin Bentmann updated MNG-4869:
-----------------------------------

    Component/s: POM
    Description: 
We have the following situation in our project:

A parent pom containing the following infos:
{code:xml}
<properties>
    <jettyVersion>6.1.9</jettyVersion>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>${jettyVersion}</version>
        </plugin>
    </plugins>
</build>
{code}
A child module with the following configuration:
{code:xml}
<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-plus</artifactId>
                    <version>${jettyVersion}</version>
                </dependency>
                <dependency>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-naming</artifactId>
                    <version>${jettyVersion}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
{code}
The property jettyVersion was added during the latest. The parent pom is the first sub-module in the master pom, followed by the other sub-modules including the child-module above. All <parent> definitions include correct <relativePath> entries.

Previously, it worked perfectly well to simply build the master pom, which in turn built the parent followed by all other sub-modules.

Since Maven 3, however, this didn't work anymore. Right after the addition of the jettyVersion property, Maven 3 complained with the following error:
{noformat}
[ERROR] The build could not read 24 projects -> [Help 1]
[ERROR]   
[ERROR]   The project xyz:2.0.0-SNAPSHOT (/path/to/child/pom.xml) has 2 errors
[ERROR]     'build.plugins.plugin[org.mortbay.jetty:maven-jetty-plugin].dependencies.dependency.version' for org.mortbay.jetty:jetty-plus:jar must be a valid version but is '${jettyVersion}'. @ line 28, column 28
[ERROR]     'build.plugins.plugin[org.mortbay.jetty:maven-jetty-plugin].dependencies.dependency.version' for org.mortbay.jetty:jetty-naming:jar must be a valid version but is '${jettyVersion}'. @ line 33, column 28
{noformat}
Building the parent manually fixed this issue.

To be precise, our actual project involved another parent level, i.e. the parent described above was the parent of parent2 while parent2 was the parent of the child module - but I don't think that this is relevant. I'm just mentioning it just in case. Again, all <parent> definitions include correct <relativePath> entries.

This worked in Maven 2 so I think it's a regression.

  was:
We have the following situation in our project:

A parent pom containing the following infos:
<properties>
    <jettyVersion>6.1.9</jettyVersion>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>${jettyVersion}</version>
        </plugin>
    </plugins>
</build>

A child module with the following configuration:
<build>
    <plugins>
        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-plus</artifactId>
                    <version>${jettyVersion}</version>
                </dependency>
                <dependency>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-naming</artifactId>
                    <version>${jettyVersion}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

The property jettyVersion was added during the latest. The parent pom is the first sub-module in the master pom, followed by the other sub-modules including the child-module above. All <parent> definitions include correct <relativePath> entries.

Previously, it worked perfectly well to simply build the master pom, which in turn built the parent followed by all other sub-modules.

Since Maven 3, however, this didn't work anymore. Right after the addition of the jettyVersion property, Maven 3 complained with the following error:

[ERROR] The build could not read 24 projects -> [Help 1]
[ERROR]   
[ERROR]   The project xyz:2.0.0-SNAPSHOT (/path/to/child/pom.xml) has 2 errors
[ERROR]     'build.plugins.plugin[org.mortbay.jetty:maven-jetty-plugin].dependencies.dependency.version' for org.mortbay.jetty:jetty-plus:jar must be a valid version but is '${jettyVersion}'. @ line 28, column 28
[ERROR]     'build.plugins.plugin[org.mortbay.jetty:maven-jetty-plugin].dependencies.dependency.version' for org.mortbay.jetty:jetty-naming:jar must be a valid version but is '${jettyVersion}'. @ line 33, column 28

Building the parent manually fixed this issue.

To be precise, our actual project involved another parent level, i.e. the parent described above was the parent of parent2 while parent2 was the parent of the child module - but I don't think that this is relevant. I'm just mentioning it just in case. Again, all <parent> definitions include correct <relativePath> entries.

This worked in Maven 2 so I think it's a regression.

       Priority: Trivial  (was: Critical)
     Issue Type: Improvement  (was: Bug)
        Summary: Warn when relativePath points at parent POM with different version  (was: Parent POM is not evaluated as expected, regression in Maven 3)

bq. This mistake didn't hurt in Maven 2 since (I guess) the parent version was ignored in the presence of a valid relativePath. This seems to have changed in Maven 3, which is actually ok/correct.
Both Maven 2.x and 3.x fall back to resolution from the local/remote repos if the parent given by {{relativePath}} doesn't have the exact coordinates (groupId, artifactId and version) as requested by the child. That said, without concrete examples and logs, I currently cannot tell what the relevant difference here is.

bq. I think that Maven 3 should warn/fail in such a situation
Maven 3.0 introduced a related warning for {{relativePath}} ([MNG-4619]) that some users already complained about. To my knowledge, child POMs inheriting from a different parent version than in the local checkout isn't uncommon, so emitting a warning here seems even more harm than good. But well, I'll leave that issue open for discussion/voting.

> Warn when relativePath points at parent POM with different version
> ------------------------------------------------------------------
>
>                 Key: MNG-4869
>                 URL: http://jira.codehaus.org/browse/MNG-4869
>             Project: Maven 2 & 3
>          Issue Type: Improvement
>          Components: POM
>    Affects Versions: 3.0
>         Environment: Apache Maven 3.0 (r1004208; 2010-10-04 13:50:56+0200)
> Java version: 1.6.0_20
> Java home: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
> Default locale: en_US, platform encoding: MacRoman
> OS name: "mac os x" version: "10.6.4" arch: "x86_64" Family: "mac"
>            Reporter: Joern Huxhorn
>            Assignee: Benjamin Bentmann
>            Priority: Trivial
>         Attachments: MNG-4869.zip
>
>
> We have the following situation in our project:
> A parent pom containing the following infos:
> {code:xml}
> <properties>
>     <jettyVersion>6.1.9</jettyVersion>
> </properties>
> <build>
>     <plugins>
>         <plugin>
>             <groupId>org.mortbay.jetty</groupId>
>             <artifactId>maven-jetty-plugin</artifactId>
>             <version>${jettyVersion}</version>
>         </plugin>
>     </plugins>
> </build>
> {code}
> A child module with the following configuration:
> {code:xml}
> <build>
>     <plugins>
>         <plugin>
>             <groupId>org.mortbay.jetty</groupId>
>             <artifactId>maven-jetty-plugin</artifactId>
>             <dependencies>
>                 <dependency>
>                     <groupId>org.mortbay.jetty</groupId>
>                     <artifactId>jetty-plus</artifactId>
>                     <version>${jettyVersion}</version>
>                 </dependency>
>                 <dependency>
>                     <groupId>org.mortbay.jetty</groupId>
>                     <artifactId>jetty-naming</artifactId>
>                     <version>${jettyVersion}</version>
>                 </dependency>
>             </dependencies>
>         </plugin>
>     </plugins>
> </build>
> {code}
> The property jettyVersion was added during the latest. The parent pom is the first sub-module in the master pom, followed by the other sub-modules including the child-module above. All <parent> definitions include correct <relativePath> entries.
> Previously, it worked perfectly well to simply build the master pom, which in turn built the parent followed by all other sub-modules.
> Since Maven 3, however, this didn't work anymore. Right after the addition of the jettyVersion property, Maven 3 complained with the following error:
> {noformat}
> [ERROR] The build could not read 24 projects -> [Help 1]
> [ERROR]   
> [ERROR]   The project xyz:2.0.0-SNAPSHOT (/path/to/child/pom.xml) has 2 errors
> [ERROR]     'build.plugins.plugin[org.mortbay.jetty:maven-jetty-plugin].dependencies.dependency.version' for org.mortbay.jetty:jetty-plus:jar must be a valid version but is '${jettyVersion}'. @ line 28, column 28
> [ERROR]     'build.plugins.plugin[org.mortbay.jetty:maven-jetty-plugin].dependencies.dependency.version' for org.mortbay.jetty:jetty-naming:jar must be a valid version but is '${jettyVersion}'. @ line 33, column 28
> {noformat}
> Building the parent manually fixed this issue.
> To be precise, our actual project involved another parent level, i.e. the parent described above was the parent of parent2 while parent2 was the parent of the child module - but I don't think that this is relevant. I'm just mentioning it just in case. Again, all <parent> definitions include correct <relativePath> entries.
> This worked in Maven 2 so I think it's a regression.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira