为什么在 Gradle 4.4/Java 插件中不可用 “api” 方法,而“实现”是?

我正在使用AS 3.1,试图成为一名优秀的程序员,并清除“编译已过时”警告。但我希望这个特殊的.jar将番石榴暴露为API。其他项目(例如CloudServerApplication)也需要番石榴。但是当我使用关键字而不是 or 时,我得到的是:apicompileimplementation

>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.

我尝试谷歌搜索错误,但没有找到任何有用的东西。不知道接下来去哪里看。

My 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'

您可以查看官方文档

标准Java插件和Java库插件之间的主要区别在于,后者引入了向消费者公开API的概念。库是供其他组件使用的 Java 组件。这是多项目构建中非常常见的用例,但一旦您有外部依赖项,它也会立即使用。

该插件公开了两个可用于声明依赖项的配置:api 和实现


答案 2

推荐