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