Hi,

Project with one dependency:

  <dependencies>
    <dependency>
      <groupId>jakarta.transaction</groupId>
      <artifactId>jakarta.transaction-api</artifactId>
      <version>2.0.1</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>

dependency:tree -D verbose

org.apache.maven.its.dependency-tree:verbose:jar:1.0-SNAPSHOT
\- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:compile
   +- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:3.0.1:provided
   |  +- jakarta.el:jakarta.el-api:jar:4.0.0:provided
   |  +- (jakarta.interceptor:jakarta.interceptor-api:jar:2.0.1:provided -
omitted for duplicate)
   |  +- jakarta.inject:jakarta.inject-api:jar:2.0.1:provided
   |  \- jakarta.ejb:jakarta.ejb-api:jar:4.0.0:provided
   \- jakarta.interceptor:jakarta.interceptor-api:jar:2.0.1:provided
      \- jakarta.annotation:jakarta.annotation-api:jar:2.0.0:provided


When change dependency to runtime:
  <dependencies>
    <dependency>
      <groupId>jakarta.transaction</groupId>
      <artifactId>jakarta.transaction-api</artifactId>
      <version>2.0.1</version>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

I have:
org.apache.maven.its.dependency-tree:verbose:jar:1.0-SNAPSHOT
\- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:runtime
   +- jakarta.enterprise:jakarta.enterprise.cdi-api:jar:3.0.1:runtime
   |  +- jakarta.el:jakarta.el-api:jar:4.0.0:runtime
   |  +- (jakarta.interceptor:jakarta.interceptor-api:jar:2.0.1:runtime -
omitted for duplicate)
   |  +- jakarta.inject:jakarta.inject-api:jar:2.0.1:runtime
   |  \- jakarta.ejb:jakarta.ejb-api:jar:4.0.0:runtime
   \- jakarta.interceptor:jakarta.interceptor-api:jar:2.0.1:runtime
      \- jakarta.annotation:jakarta.annotation-api:jar:2.0.0:runtime

so transitive dependencies with scope provided are lost and changed to
runtime.

Is it correct behavior?

It is cause for problem described in [1], [2]

dependency:tree - without verbose mode show in both case:

 org.apache.maven.its.dependency-tree:verbose:jar:1.0-SNAPSHOT
 \- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:compile

or

 org.apache.maven.its.dependency-tree:verbose:jar:1.0-SNAPSHOT
 \- jakarta.transaction:jakarta.transaction-api:jar:2.0.1:runtime

Logic responsible for it is in resolver-util (old eather-util) [3]

[1] https://issues.apache.org/jira/browse/MENFORCER-394
[2] https://issues.apache.org/jira/browse/MENFORCER-402
[3]
https://github.com/apache/maven-resolver/blob/master/maven-resolver-util/src/main/java/org/eclipse/aether/util/graph/transformer/JavaScopeDeriver.java#L48




-- 
Sławomir Jaranowski

Reply via email to