Disclaimer
(I originally asked the question in a very detailed manner over here. I've excerpted it here as the maven-users
mailing list has gone quiet on this question.) (not just another newbie question)
Reference
My reference material is http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management; please let me know in this discussion if this is outdated or wrong.
Question
There is a section in that document that begins with "A second, and very important...". In what follows I'll refer to that section's projects A
and B
, and will excerpt from them.
In that section, you will see that project A
has a <dependencyManagement>
section that--among other things--defines an artifact, c
, as having scope compile
:
<!-- In A's pom.xml; condensed for brevity -->
<dependencyManagement>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<version>1.0</version>
<scope>compile</scope> <!-- look: compile scope -->
</dependency>
</dependencyManagement>
Then you will see a pom.xml
for project B
that (a) inherits from project A
(thus inheriting its dependencyManagement
section) and (b) establishes a dependency on artifact c
, without having to specify its version
. You will also notice that the dependency on artifact c
overrides the scope of c
to be runtime
, not compile
:
<!-- In B's pom.xml, whose parent is A's pom.xml (above); condensed for brevity -->
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>c</artifactId>
<scope>runtime</scope> <!-- look: runtime scope -->
</dependency>
</dependencies>
Again, you'll note that there is no <version>
element, but there is a <scope>runtime</scope>
element.
My interpretation of this is that when all is said and done, B
will depend on version 1.0
of artifact c
in runtime
scope, not compile
scope.
Is that correct? My maven-ear-plugin
bug rests on the fact that this is the expected behavior. It is not what happens when the maven-ear-plugin
builds an .ear
file.
Next, if that's correct, I would also expect that if artifact c
had any transitive runtime
dependencies they would be available in B
's runtime
classpath (as defined by the somewhat baffling table in http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope).
Is that correct?