maven-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Schulte ...@schulte.it>
Subject Re: [jira] [Reopened] (MNG-5227) The 'optional' flag of a dependency should be manageable.
Date Fri, 29 Jan 2016 13:23:11 GMT
Am 01/29/16 um 11:50 schrieb Robert Scholte:
> Hi,
> What interested me is that is seems to be the intention to NOT manage the
> optional flag.[1]

It's one of those issues flagged a regression in Maven 3 which hasn't 
been. Maven 2 just did not have support for it. It got removed for Maven 
3.0 in 2010 and added to Aether in 2013 without (re-)adding it to Maven 
(Aether Bugs 399822 398572 - there are others, if I remember correctly). 
Real issue is this nasty bug affecting dependency management in general 
- not only the optional flag. Please see this pom.xml:


<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>localhost</groupId>
   <artifactId>MNG-5227</artifactId>
   <version>1-SNAPSHOT</version>

   <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
         <scope>test</scope>
       </dependency>
     </dependencies>
   </dependencyManagement>

   <dependencies>
     <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-model</artifactId>
       <version>3.3.9</version>
     </dependency>
   </dependencies>
</project>

The scope of 'commons-lang3' is managed to 'test'. That scope is not 
transitive. Executing 'mvn-3.3.9 dependency:tree' (and all other Maven 
versions >= 2) incorrectly contains that dependency and produces:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ MNG-5227 ---
[INFO] localhost:MNG-5227:jar:1-SNAPSHOT
[INFO] \- org.apache.maven:maven-model:jar:3.3.9:compile
[INFO]    +- org.codehaus.plexus:plexus-utils:jar:3.0.22:compile
[INFO]    \- org.apache.commons:commons-lang3:jar:3.4:test

See that 'test' scope. That's just not correct. The transitive 'test' 
dependency should not be there since the 'test' scope is not transitive. 
With the Aether patch applied executing 'mvn-3.4.0-SNAPSHOT 
dependency:tree' now produces the correct graph:

[INFO] --- maven-dependency-plugin:2.9:tree (default-cli) @ MNG-5227 ---
[INFO] localhost:MNG-5227:jar:1-SNAPSHOT
[INFO] \- org.apache.maven:maven-model:jar:3.3.9:compile
[INFO]    \- org.codehaus.plexus:plexus-utils:jar:3.0.22:compile

Same for the 'optional' flag. Not having an option to manage the 
'optional' flag really is an issue. Either you need to manage it to 
'false', to include a transitive dependency flagged optional or you need 
to manage it to 'true' to exclude a transitive dependency you do not 
need (or which should have been flagged optional but isn't). When Maven 
was approaching 3.0, Aether wasn't supporting it.

Regards,
-- 
Christian


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Mime
View raw message