You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Guillaume Nodet (Jira)" <ji...@apache.org> on 2022/10/20 08:11:02 UTC

[jira] [Updated] (MNG-5982) The POM for ... is invalid, transitive dependencies ... while property was overriden

     [ https://issues.apache.org/jira/browse/MNG-5982?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guillaume Nodet updated MNG-5982:
---------------------------------
    Fix Version/s: 4.0.0-alpha-2

> The POM for ... is invalid, transitive dependencies ... while property was overriden
> ------------------------------------------------------------------------------------
>
>                 Key: MNG-5982
>                 URL: https://issues.apache.org/jira/browse/MNG-5982
>             Project: Maven
>          Issue Type: Bug
>          Components: Dependencies, Inheritance and Interpolation, POM
>    Affects Versions: 3.0, 3.3.9
>         Environment: Linux and Mac
>            Reporter: Fabrice Pipart
>            Assignee: Michael Osipov
>            Priority: Minor
>              Labels: needs-attention
>             Fix For: 3.8.5, 4.0.0-alpha-1, 4.0.0-alpha-2, 4.0.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> I experienced issues with a maven build that does not behave the same way if done on Windows (like they were done in the past) or Linux (like I want to do them now).
> I want to build a project that has a dependency on another project that pom that itself imports a pom that contains a Windows path.
> {code:xml}
>    my project   |           other project
>                 |
> mybuild  -------|------> pom --------> pom with systemPath
>             dependency        import
>                 |
> {code}
> But in a nutshell, here is my pom:
> {code:xml}
> <groupId>test.properties</groupId>
> <artifactId>buildme</artifactId>
> <version>1.0-SNAPSHOT</version>
> ...
> <dependencies>
>   <dependency>
>     <groupId>test.properties.installme</groupId>
>     <artifactId>module</artifactId>
>     <version>1.0-SNAPSHOT</version>
>     <type>pom</type>
>   </dependency>
> </dependencies>
> {code}
> And I depend on a pom that looks like this (not under my control)
> {code:xml}
> <groupId>test.properties.installme</groupId>
> <artifactId>module</artifactId>
> <version>1.0-SNAPSHOT</version>
> ...
> <dependencyManagement>
>   <dependencies>
>     <dependency>
>       <groupId>test.properties.installme</groupId>
>       <artifactId>dependency</artifactId>
>       <version>1.0-SNAPSHOT</version>
>       <scope>import</scope>
>       <type>pom</type>
>     </dependency>
>   </dependencies>
> </dependencyManagement>
> <dependencies>
>   <dependency>
>     <groupId>log4j</groupId>
>     <artifactId>log4j</artifactId>
>     <version>1.2.17</version>
>   </dependency>
> </dependencies>
> {code}
> and the problem lies in this last pom (not under my control again):
> {code:xml}
> <modelVersion>4.0.0</modelVersion>  
> <groupId>test.properties.installme</groupId>
> <artifactId>dependency</artifactId>
> <version>1.0-SNAPSHOT</version>
> ...
> <properties>
>   <com.sun.tools.path>D:/java/jdk1.8.0_65/lib/tools.jar</com.sun.tools.path>
> </properties>
> <dependencyManagement>
>   <dependencies>
>     <dependency>
>       <groupId>com.sun</groupId>
>       <artifactId>tools</artifactId>
>       <version>1.8</version>
>       <scope>system</scope>
>       <systemPath>${com.sun.tools.path}</systemPath>
>     </dependency>
>   </dependencies>
> </dependencyManagement>
> {code}
> I have no control on the other project in question. I totally agree that a refactoring to use environment variable in place of the hard coded paths would solve my problem. But instead the Windows path is defined in a property. *One would think that overriding the value of the property depending on my platform would be enough.* But it is not.
> Unfortunately in this precise case case maven seems to behave to behave poorly.
> Before applying any property override in any form (in settings.xml, -Dproperty=, redefinition in root pom), maven starts building the effective pom. And during that step, if it finds the pattern I mentioned above (a dependency on another pom that itself imports a pom that contains a Windows path), then it says:
> {code:xml}
> The POM for <groupId>:<artifactId>:jar:<version> is invalid, transitive dependencies (if any) will not be available
> {code}
> As a consequence, my project needs to explicitly define all the dependencies of the second project. And I cannot rely on transitive dependencies which gives me a lot of trouble.
> In order to illustrate the issue, I created a minimal example showing the problem. It can be found here: [https://github.com/fabricepipart/test-properties]
> Can you confirm this is a bug from maven?
> I tested with several versions of maven. 3.0 up to a 3.3.9 I think.
> The issue remains the same. It is all a matter of redefining the value of the property based on the environment. If I *launch maven with -Dcom.sun.tools.path=/correct/linux/path*, globally my build is fine. Because when the classes are compiled, it is the *overriden Linux path that is taken*, not the Windows one. 
> But during the *initial evaluation of the pom*(before any maven phase is started), the error I mentioned above is thrown because the *value of the property is still the Windows one* (and the path is considered invalid).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)