【问题标题】:Gradle dependency scopesGradle 依赖范围
【发布时间】:2019-08-27 00:40:44
【问题描述】:

我对 Gradle 进行了一些试验,但主要是作为 Maven 用户,一些依赖范围让我感到困惑……

有些与 Maven 相同:

compile -> compile
runtime -> runtime
compileOnly -> provided

但我也遇到了implementation,这听起来像 Maven POM 的 parent 元素,但又不是。

谁能解释一下implementation是什么以及其他一些(如果它们存在的话)我在这里没有提到(上面的测试版本很清楚,不需要解释)?

而如果implementation在Maven上不像parent,我们如何在Gradle中拥有Maven的parent POM效果?

【问题讨论】:

标签: maven gradle parent-pom


【解决方案1】:

如评论,请查看the documentation 甚至this recent webcast(免责声明:我正在共同展示该网络广播)

对于 Maven 比较,从 Maven 迁移/学习到 Gradle 与从 subversion 迁移到 git 相同:虽然有些词汇是相同的,但了解后者的模型比比较更有帮助。

简而言之:

  • 不要在 Gradle 中使用 compileruntime,它们已被弃用。
  • implementation 与编译和运行应用程序所需的依赖项相关。
  • compileOnlyruntimeOnly 在上面的上下文中应该是不言自明的
  • java-library 插件添加了 api 配置,该配置保留用于库的使用者需要编译的依赖项。

没有直接等同于 Maven 父 pom。无论您是在谈论插件、构建配置还是依赖项,集中化的方式都是不同的。查看multi-project authoring 上的文档。

【讨论】:

  • 不知道为什么这个答案被降级为-2,但它对我很有用。 +1
  • 那么'api'有什么作用呢?
  • mvnrepository.com/artifact/org.springframework.boot/…,它显示“编译”。是不是说它只在编译时需要,然后转换成字节码,在运行时不需要?
  • 不,这意味着编译需要它,这也意味着在运行时。
  • 添加 id 'java-library' 然后使用 'api' 定义依赖将起作用:)
猜你喜欢
  • 2015-10-14
  • 2020-10-21
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2013-02-19
  • 2021-12-17
相关资源
最近更新 更多