Maven继承依赖模块的依赖项

Maven继承依赖模块的依赖项,maven,module,dependencies,Maven,Module,Dependencies,目前我有一个项目,模块B依赖于模块a 模块A将是: <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/maven-v4_0_0.xsd"> <modelVer

目前我有一个项目,模块B依赖于模块a

模块A将是:

  <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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.A</groupId>
    <artifactId>P</artifactId>
    <version>1.0.0</version>
  </parent>
  <artifactId>A</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <name>A</name>
  <build>
    <sourceDirectory>${sourceDirectory}/A/src</sourceDirectory>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>5.0.0</version>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.A</groupId>
    <artifactId>P</artifactId>
    <version>1.0.0</version>
  </parent>
  <artifactId>B</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <name>B</name>
  <build>
    <sourceDirectory>${sourceDirectory}/B/src</sourceDirectory>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.A</groupId>
      <artifactId>C</artifactId>
      <version>1.0.0</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.A</groupId>
      <artifactId>A</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>
</project>

4.0.0
com.A
P
1.0.0
A.
1.0.0
罐子
A.
${sourceDirectory}/A/src
org.osgi
org.osgi.core
5.0.0
真的
单元B将是:

  <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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.A</groupId>
    <artifactId>P</artifactId>
    <version>1.0.0</version>
  </parent>
  <artifactId>A</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <name>A</name>
  <build>
    <sourceDirectory>${sourceDirectory}/A/src</sourceDirectory>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <version>5.0.0</version>
      <optional>true</optional>
    </dependency>
  </dependencies>
</project>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.A</groupId>
    <artifactId>P</artifactId>
    <version>1.0.0</version>
  </parent>
  <artifactId>B</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <name>B</name>
  <build>
    <sourceDirectory>${sourceDirectory}/B/src</sourceDirectory>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.A</groupId>
      <artifactId>C</artifactId>
      <version>1.0.0</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>com.A</groupId>
      <artifactId>A</artifactId>
      <version>1.0.0</version>
    </dependency>
  </dependencies>
</project>

4.0.0
com.A
P
1.0.0
B
1.0.0
罐子
B
${sourceDirectory}/B/src
com.A
C
1.0.0
真的
com.A
A.
1.0.0
为了编译B,我需要a-dep中的类。如果我手动将a-dep添加为依赖项,那么一切都可以编译。但是这个项目需要我依靠A来访问A-dep,而不是显式地声明A-dep


有没有办法通过依赖模块a从a-dep获取类?

可以通过删除真标记来解决问题,因为它阻止B查看依赖关系。

应该可以。你能做一个例子项目来说明这个问题吗?如果你定义了一个依赖项,你也会得到所有可传递的依赖项。那么我的问题是在依赖项中定义了一个作用域?@khmarbaise我已经用实际代码更新了示例(只替换了变量名)。我认为它应该也能工作,但当我编译B时,它不会像osgi核心中的类那样导致错误。为什么要定义
${sourceDirectory}/B/src