web-dev-qa-db-fra.com

Comment créer un fichier Jar avec des dépendances par Gradle 7.0+?

Mon jar actuel dans build.gradle est comme ci-dessous:

jar {
manifest {
    attributes "Main-Class": "hoge.Main"
}
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}

et fonctionne bien.

Cependant, j'ai un message de Gradle (peut-être depuis 6+?)

Voici le véritable message:

The compile configuration has been deprecated for dependency declaration. This will fail with an error in Gradle 7.0. Please use the implementation configuration instead.

La partie configurations.compile est obsolète.

Comment puis-je le mettre à jour?

Si j'ai changé

jar {
manifest {
    attributes "Main-Class": "hoge.Main"
}
    from configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }
}

Gradle dit > Resolving configuration 'implementation' directly is not allowed

2
kensuke1984

La configuration compile a été déconseillée au profit de implementation.

Voir docs .

3
smac89

Pour ceux qui souhaitent mettre à niveau leur configuration Gradle au format 7.0+, notez que le simple remplacement de compile par implementation ou api entraînera probablement un bug si vous utilisez le Java brancher. Vous devez utiliser le Java-library brancher. Documentation .

Assurez-vous que dans votre gradle.config vous remplacez:

apply plugin: 'Java'

avec:

apply plugin: 'Java-library'

Vous utilisez implementation pour les dépendances non transitives et api pour les dépendances transitives (si les dépendances sont consommées directement par les dépendants de votre projet).

1
Andrei

Vous devez remplacer compile par runtimeClasspath dans votre cas.

Dans les versions précédentes de Gradle, compile avait trop de responsabilités:

  • Déclarez les dépendances
  • Résolu comme le chemin de classe de compilation
  • Exposé aux projets consommateurs

Il a été remplacé par implementation pour la déclaration de dépendance, il doit également être remplacé par quelque chose pour la résolution.

Cependant, dans votre cas, vous souhaiterez probablement empaqueter les dépendances runtime et non celles de compilation. Par conséquent, vous devez utiliser runtimeClasspath comme configuration à résoudre. Et pas compileClasspath qui ne contiendrait aucune dépendance runtimeOnly.

1
Louis Jacomet