gradle 中实现依赖项的 Maven 等价物是什么?

What is the maven equivalent of implementation dependencies in gradle?

我最近了解到 gradle has api/implementation "scopes" for dependencies,并且我试图弄清楚是否有与 gradle 中的 implementation 等效的 Maven。 Maven 依赖范围的 None 似乎完全适合这个 - provided 使其不是运行时依赖,compile/runtime 似乎没有做正确的事情,.. . 所以似乎没有直接的等价物。

基本上,我有一个在编译时(对于我的库)/运行时(对于使用我的库的代码)需要我的库的依赖项,但我不想在 compile 依赖于我的库的代码的类路径。这可能与 maven 有关吗?

据我所知这是不可能的。

如果您想避免在代码中无意中使用传递依赖项,可以使用 dependency:analysedependency:analyze-only

如果直接使用传递依赖项中的 类,后者允许构建失败。

  • 此类依赖项在您的库中声明时应具有 scope=compile。这样它将在 lib 的编译过程中可用。
  • 但是在依赖于您的库的其他模块的 dependencyManagement 部分中声明时,它应该具有 scope=runtime。这样在编译其他模块时它就不会出现在类路径中。

您能否更具体地给出架构示例(模块、子模块)?

如果我有以下模块:

  • A: 依赖于依赖 x 范围编译
  • B: 对依赖 A 范围编译有依赖性

现在我希望 x 位于类路径中并在 A 构建期间编译,但我不希望 x 位于 B 类路径中

嗯,你会在 B 中得到 x 因为它是一个传递依赖,但你可以很容易地排除它(当你将依赖 A 声明到 B 中时),所以它不会在类路径中。

<dependencies>
    <dependency>
      <groupId>test.test</groupId>
      <artifactId>B</artifactId>
      <version>1.0-SNAPSHOT</version>
      <exclusions>
        <exclusion>
          <groupId>test.test</groupId>
          <artifactId>x</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

更多信息:https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html