从传递依赖导入类

dan*_*rba 6 java dependencies pom.xml maven

我有以下依赖项:A、B 和 X。“->”表示依赖。

A -> B
X -> A
Run Code Online (Sandbox Code Playgroud)

B 有以下公共类:

public class PublicClassB {
     public static void do() {
     }
}
Run Code Online (Sandbox Code Playgroud)

PublicClassB由 X 和 AE 使用

A 类的 pom 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.company.name</groupId>
    <artifactId>A</artifactId>
    <version>1.0.0</version>
    <dependencies>
          <dependency>
              <groupId>my.company.name</groupId>
              <artifactId>B</artifactId>
              <version>1.0.0</version>
          </dependency>
    </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

X 的 pom 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.company.name</groupId>
    <artifactId>X</artifactId>
    <version>1.0.0</version>
    <dependencies>
          <dependency>
              <groupId>my.company.name</groupId>
              <artifactId>A</artifactId>
              <version>1.0.0</version>
          </dependency>
    </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

有没有办法从 X访问PublicClassB#do() ?我无法进行导入,Eclipse 没有检测到 B 上的包。

JF *_*ier 4

首先,正如评论中提到的,您需要一个版本标记或从某些依赖项管理中获取版本。其次,m2e(Eclipse 插件)并不总是正确确定依赖关系。尝试使用 Maven 进行构建(运行方式 -> Maven 构建)并查看是否出现任何错误。

第三:如果您使用 B 中的类,您还应该将 B 列为依赖项。间接依赖 B 绘制是危险的(A 将来可能会更改其依赖项),并且还会隐藏您的“真实”依赖项。