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

时间:2018-09-25 12:45:48

标签: maven gradle transitive-dependency

我最近了解到gradle has api/implementation "scopes" for dependencies,并且试图弄清楚gradle中是否有与implementation相当的专家。没有Maven依赖范围似乎完全适合此-provided使其不是运行时依赖项,compile / runtime似乎没有做正确的事,...因此似乎没有直接的对等物。

基本上,我对库的依赖在编译时(对于我的库)/运行时(对于使用我的库的代码)是必需的,但是我不想在 compile < / em>取决于我的库的代码的类路径。这可能与Maven有关吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

AFAIK这是不可能的。

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

如果您直接使用传递依赖中的类,则后一种会使您失败。

答案 2 :(得分:0)

您能否更具体一点,并举例说明架构(模块,子模块)?

如果我具有以下模块:

  • A:具有对x范围编译的依赖
  • B:对依赖项A范围编译具有依赖项

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

好吧,因为x是传递依赖项,所以会在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