为啥 Gradle 4.4/Java 插件中没有“api”方法,而 “implementation” 是可用的?
Posted
技术标签:
【中文标题】为啥 Gradle 4.4/Java 插件中没有“api”方法,而 “implementation” 是可用的?【英文标题】:Why isn't “api” method available in Gradle 4.4/Java plugin, when “implementation” is?为什么 Gradle 4.4/Java 插件中没有“api”方法,而 “implementation” 是可用的? 【发布时间】:2018-09-07 16:14:20 【问题描述】:我正在使用 AS 3.1,试图成为一名优秀的程序员并清除“编译已过时”的警告。但我希望这个特殊的 .jar 将 Guava 作为 API 公开。其他项目(例如 CloudServerApplication)也需要 Guava。但是当我使用api
关键字而不是compile
或implementation
时,我得到了这个:
>gradlew FrameManager:build
> Configure project :CloudServerApplication
4.4
> Configure project :FrameManager
4.4
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\FrameManager\app\build.gradle' line: 16
* What went wrong:
A problem occurred evaluating project ':FrameManager'.
> Could not find method api() for arguments [com.google.guava:guava:14+] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
我尝试用谷歌搜索错误,但没有发现任何有用的信息。不太确定下一步该去哪里。
我的 build.gradle:
apply plugin: 'java'
println GradleVersion.current().getVersion()
repositories
jcenter()
dependencies
implementation 'org.json:json:20160212'
api 'com.google.guava:guava:14+' //<-- This used to be "compile"
【问题讨论】:
【参考方案1】:找不到参数的方法 api()
java
插件不包含此方法。
你必须使用这个插件:
apply plugin: 'java-library'
您可以查看official doc:
标准 Java 插件和 Java 库插件之间的主要区别在于后者引入了向消费者公开的 API 的概念。库是一个 Java 组件,旨在供其他组件使用。这是多项目构建中非常常见的用例,但在您有外部依赖项时也是如此。
该插件公开了两个可用于声明依赖项的配置:api 和 implementation。
【讨论】:
以上是关于为啥 Gradle 4.4/Java 插件中没有“api”方法,而 “implementation” 是可用的?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Gradle 不使用插件 pom.xml 中声明的 Maven 存储库?
为啥我会收到错误消息:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本
为啥 kotlin gradle 插件无法使用 1.8 目标构建?
为啥我的 Gradle 构建失败并出现“未找到插件 [id: 'org.flywaydb.enterprise.flyway', version: '6.5.0']”错误?