我发现了Maven依赖插件提供的有趣特性。我分析了我的一个项目并得到了以下输出:
[WARNING] Used undeclared dependencies found:
[WARNING] org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.6:compil
e
[WARNING] javax.xml.soap:saaj-api:jar:1.3:compile
[WARNING] org.apache.geronimo.specs:geronimo-annotation_1.0_spec:jar:1.1.1:co
mpile
[WARNING] org.apache.geronimo.specs:geronimo-jaxws_2.1_spec:jar:1.0:compile
[WARNING] org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Fin
al:compile
[WARNING] org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:jar:1.1.2:c
ompile
[WARNING] Unused declared dependencies found:
[WARNING] junit:junit:jar:4.5:test
[WARNING] log4j:apache-log4j-extras:jar:1.1:compile
[WARNING] org.slf4j:slf4j-log4j12:jar:1.6.4:compile
[WARNING] org.slf4j:slf4j-api:jar:1.6.4:compile
[WARNING] org.hibernate:hibernate-c3p0:jar:3.6.8.Final:runtime
“未使用声明”部分对我来说很清楚。关于“已使用未声明”部分,它向我展示了直接由我的项目使用,但被Maven传递地包含在类路径中的依赖项。
以第一个为例,"org.apache.geronimo.specs:geronimo-javamail_1.4_spec:jar:1.6:compile",这个依赖项是因为它是cxf-rt-core-2.2.6的一个依赖项而被包含的。但是,JAR中的代码也直接被项目使用。现在我在想,当编写此项目时,开发人员可能有意使用另一个Java Mail JAR。
如果我想在我的项目中使用CXF 2.2.6,我会自动获得Geronimo提供的Java Mail规范作为传递依赖项。如果我想使用另一个Java Mail API呢?通过查看search.maven.org,我可以看到许多JAR提供Java Mail API。
谢谢