【发布时间】:2022-01-20 01:13:39
【问题描述】:
我在 pom.xml 文件中有以下依赖项:
<dependencies>
<dependency>
<groupId>com.pi4j</groupId>
<artifactId>pi4j-core</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.12.0</version>
</dependency>
</dependencies>
但是,当我查看 eclipse 中的 maven 依赖项时,我看到了这些:
那些额外的依赖是从哪里来的?它是作为我在 pom.xml 中定义的依赖项之一的一部分出现的吗?如果是这样,我如何找到 pom.xml 中的哪一个在拉它们?
【问题讨论】:
-
那些可能是传递依赖。运行
mvn dependency:tree以查看它们的确切来源。 -
非常感谢帮助。 [INFO] +- com.pi4j:pi4j-core:jar:1.4:compile [INFO] | \- javax.xml.bind:jaxb-api:jar:2.3.1:compile [INFO] | \- javax.activation:javax.activation-api:jar:1.2.0:compile [INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile [INFO] +- org.slf4j:jcl- over-slf4j:jar:1.6.6:runtime [INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.6:runtime [INFO] | \- log4j:log4j:jar:1.2.17:runtime [INFO] \- com.rabbitmq:amqp-client:jar:5.12.0:compile
-
如果我只有应用程序,即可运行的 jar 文件,是否有任何其他方法可以找到临时依赖项(不认为这是可能的)?或者找出哪个 jar 依赖于哪个库/依赖项?
-
Eclipse Maven POM Editor 有标签 Dependencies Hierarchy (标签显示在 Maven POM Editor 的底部).
-
不,您不能从平面运行时类路径计算 Maven 依赖项,因为不同的 Maven 依赖项层次结构可能导致相同的类路径,不同的 Maven 依赖项可以引用相同的 JAR,可能具有不同的传递依赖项和不同的 Maven存储库可以包含不同的东西。此外,运行时类路径不会告诉任何有关测试范围依赖关系的信息。