[JAVA] Générer un seul fichier jar exécutable avec des bibliothèques dépendantes dans Gradle 4.9

Note

problème

Jusqu'à présent, je l'ai utilisé pour générer un JAR tout-en-un.

--Utilisez gradle pour générer un seul fichier exécutable contenant des bibliothèques dépendantes https://qiita.com/mychaelstyle/items/9338f558903ac0c14bc3


Cependant, lorsque Gradle est défini sur 4,9, un Jar qui ne contient pas de fichiers dépendants est créé. J'ai changé de compilation en implémentation, donc

from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }


 La description

#### **`from configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }`**

Quand je l'ai changé en, je me suis mis en colère comme suit

C:\~~>gradlew

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\~~\build.gradle' line: 129

* What went wrong:
A problem occurred evaluating root project '~'.
> Resolving configuration 'implementation' directly is not allowed

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s

Si le nom est faux

api' not found.


 Il semble qu'il soit clairement bloqué en interne.

 Même si je l'ai recherché dans l'instruction d'erreur, seul le problème est sorti, alors je l'ai vérifié.

# Mesure

 Il est dit que `` Configuration.isCanBeResolved () '' a été ajouté à partir de Gradle 3.3 ici.

- Gradle 3.4-rc-1: "Resolving configuration 'apiElements' directly is not allowed" #31 https://github.com/jeremylong/dependency-check-gradle/issues/31

 En d'autres termes, le fait qu'il puisse ou non être collecté pour chaque configuration est différent.

---

 J'ai donc cherché une liste de Jars dépendants à partir des configurations résolubles.
 Selon cela, `` configurations '' est une collection, j'ai donc vérifié chacune avec le code suivant.

- https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html

```gradle
configurations.stream().forEach {
	println "################### " + it
	if (it.canBeResolved) {
		it.collect {
			println it.isDirectory() ? it : zipTree(it)
		}
	}
}

Liste des configurations obtenues


configuration ':annotationProcessor'
configuration ':api'
configuration ':apiElements'
configuration ':archives'
configuration ':compile'
configuration ':compileClasspath'
configuration ':compileOnly'
configuration ':default'
configuration ':implementation'
configuration ':junitPlatform'
configuration ':runtime'
configuration ':runtimeClasspath'
configuration ':runtimeElements'
configuration ':runtimeOnly'
configuration ':testAnnotationProcessor'
configuration ':testCompile'
configuration ':testCompileClasspath'
configuration ':testCompileOnly'
configuration ':testImplementation'
configuration ':testRuntime'
configuration ':testRuntimeClasspath'
configuration ':testRuntimeOnly'

Parmi ceux-ci, j'ai senti que `` compileClasspath '' était quelque chose comme ça, alors je vais essayer de l'utiliser.

Conclusion

Le résultat est un Jar avec toutes les dépendances comme avant avec le code suivant:

from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }






Recommended Posts

Générer un seul fichier jar exécutable avec des bibliothèques dépendantes dans Gradle 4.9
Créer un JAR exécutable multi-projets avec Gradle
Ajouter un projet dans n'importe quel dossier avec Gradle
Premiers pas avec Gradle (jusqu'à ce que vous créiez un projet Java et combiniez des bibliothèques externes en un seul JAR exécutable)
Pot Gradle + Kotlin-Generate avec DSL
Copier les pots dépendants dans Gradle 5
Créez un fichier jar qui peut être exécuté sur Gradle
Comment créer un fichier jar sans dépendances dans Maven
Comment créer un nouveau projet Gradle + Java + Jar dans Intellij 2016.03
Ajouter un horodatage au nom de fichier JAR dans Gradle
Construire un projet Java avec Gradle
Que faire si vous mourez avec zip si vous avez pom lors de la création d'un fichier exécutable avec gradle
(Mémo) Obtenez un ensemble de jars de bibliothèque dépendants à l'aide de Gradle
Créez un fichier jar avec la commande
Générer de la documentation DB à l'aide de SchemaSpy dans Gradle
Diviser une chaîne avec ". (Dot)" en Java
Comment sortir un pot avec la classe principale spécifiée par gradle dans IntellijIDEA