maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fabrice Pipart (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MNG-5982) The POM for ... is invalid, transitive dependencies ... while property was overriden
Date Thu, 17 Mar 2016 21:01:33 GMT

    [ https://issues.apache.org/jira/browse/MNG-5982?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15200369#comment-15200369
] 

Fabrice Pipart commented on MNG-5982:
-------------------------------------

I have no problem with the fact that the property inside the imported pom is not used. What
I want is to be able to redefine the value of that property. Even if I redefine the property
in pom that imports or in the command line with -Dcom.sun.tools.path=/correct/linux/path,
the value remains the invalid one.
It is actually even worse, the value seems to be invalid only during the evaluation of the
effective pom (ending with the omission of the transitive dependencies). Otherwise, when the
mvn command is executed, the value is actually overriden.

I hope I explained it clearly enough. I can try to refine the example if needed. I tried to
keep it as simple as possible for the moment.

> 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
>
> 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
(v6.3.4#6332)

Mime
View raw message