Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.0-alpha-7
-
None
Description
The situation is quite complex to explain. I've a parent pom that defines dependencies in depMgmt. There's two projects in the multimodule project, the second depending on the first.
Excerpt (parent/depMgmt):
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> <scope>runtime</scope> <optional>true</optional>
First child (redefines scope only):
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <scope>compile</scope> </dependency>
Second child:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>m3pb</groupId> <artifactId>subproject1</artifactId> <version>${project.version}</version> </dependency>
When running with maven 2, it works. When ran with maven 3, it fails on the second project, with a NoClassDefFoundError on the logback jar.
I seem to understand this is actually a bug in maven 2: as the depMgmt defines optional=true, it shouldn't have been working in maven2 without redeclaring the dependency in the second project.
From my understanding:
- With maven 2, the transivity is taken in account and gives logback through the subproject1 link (from the second)
- With maven 3, this just doesn't work and this is the correct behaviour.
Please excuse my basic analysis.
I'm attaching a test project to let see more precisely the problem.
If you need any help, please let me know.
Cheers
--
Baptiste