The most strange thing for me is that if I have an artifact with
transitive provided dependencies and put it as runtime dependency -
provided scopes are changed to runtime.

If it was true when I define dependency in runtime scope I will have all
transitive dependencies on classpath even provided ones. But it did not
happen in such a way.

I've added some test [1]

[1]
https://github.com/apache/maven-dependency-tree/tree/runtime-provided-verbose


pon., 13 cze 2022 o 23:25 Tamás Cservenák <[email protected]> napisał(a):

> Yes, this is the correct behaviour. Provided dependencies are "end stops",
> at least should be. Will take a peek more, but i'd bet that scopes of dep
> are wrong.
>
> T
>
> On Mon, Jun 13, 2022, 23:10 Slawomir Jaranowski <[email protected]>
> wrote:
>
> > 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
> >
>


-- 
Sławomir Jaranowski

Reply via email to