web-dev-qa-db-fra.com

Pourquoi la méthode «api» n'est-elle pas disponible dans le plug-in Gradle 4.4 / Java, quand «implémentation» l'est?

J'utilise AS 3.1, essayant d'être un bon programmeur et de supprimer les avertissements "la compilation est obsolète". Mais je souhaite que ce .jar particulier expose Guava en tant qu'API. D'autres projets (par exemple CloudServerApplication) ont également besoin de Guava. Mais lorsque j'utilise le mot clé api, au lieu de compile ou implementation, j'obtiens ceci:

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

J'ai essayé de googler l'erreur, mais je n'ai rien trouvé d'utile. Je ne sais pas vraiment où chercher ensuite.

Mon 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"
}
21
greeble31

Impossible de trouver la méthode api () pour les arguments

Le plugin Java ne contient pas cette méthode.

Vous devez utiliser ce plugin:

apply plugin: 'Java-library'

Comme vous pouvez le vérifier dans le doc officiel :

La principale différence entre le plug-in standard Java et le plug-in Java Library) est que ce dernier introduit le concept d'une API exposée aux consommateurs. Une bibliothèque est un = Java composant destiné à être consommé par d'autres composants. C'est un cas d'utilisation très courant dans les builds multi-projets, mais aussi dès que vous avez des dépendances externes.

Le plugin expose deux configurations qui peuvent être utilisées pour déclarer des dépendances: api et implémentation .

19
Gabriele Mariotti