[JAVA] Generieren Sie in Gradle 4.9 eine einzelne ausführbare JAR-Datei mit abhängigen Bibliotheken

Memo

Problem

Bisher habe ich damit eine All-in-One-JAR generiert.


Wenn Gradle jedoch auf 4.9 eingestellt ist, wird Jar erstellt, das keine abhängigen Dateien enthält. Ich habe also die Kompilierung in die Implementierung geändert

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


 Die Beschreibung

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

Als ich es änderte, wurde ich wie folgt wütend

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

Wenn der Name falsch ist

api' not found.


 Es scheint, dass es intern eindeutig blockiert ist.

 Selbst wenn ich in der Fehleranweisung danach gesucht habe, ist nur Issue herausgekommen, also habe ich es nachgeschlagen.

# Messen

 Es wird gesagt, dass hier `` `Configuration.isCanBeResolved ()` `` aus Gradle 3.3 hinzugefügt wurde.

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

 Mit anderen Worten, ob es für jede Konfiguration erfasst werden kann oder nicht, ist unterschiedlich.

---

 Also suchte ich nach einer Liste abhängiger Gläser aus den auflösbaren Konfigurationen.
 Demnach ist `` `Konfigurationen``` eine Sammlung, daher habe ich jede mit dem folgenden Code überprüft.

- 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 der erhaltenen Konfiguration


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'

Von diesen hatte ich das Gefühl, dass `` `compileClasspath``` so etwas ist, also werde ich versuchen, es zu verwenden.

Fazit

Das Ergebnis ist ein Jar mit allen Abhängigkeiten wie zuvor mit dem folgenden Code:

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






Recommended Posts

Generieren Sie in Gradle 4.9 eine einzelne ausführbare JAR-Datei mit abhängigen Bibliotheken
Erstellen Sie mit Gradle eine ausführbare JAR für mehrere Projekte
Fügen Sie mit Gradle ein Projekt in einen beliebigen Ordner ein
Erste Schritte mit Gradle (bis Sie ein Java-Projekt erstellen und externe Bibliotheken in einer ausführbaren JAR kombinieren)
Gradle + Kotlin-Glas mit DSL generieren
Kopieren Sie abhängige Gläser in Gradle 5
Erstellen Sie eine JAR-Datei, die auf Gradle ausgeführt werden kann
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
Fügen Sie dem JAR-Dateinamen in Gradle einen Zeitstempel hinzu
Erstellen eines Java-Projekts mit Gradle
Was tun, wenn Sie mit Reißverschluss sterben, wenn Sie Pom haben, wenn Sie ein ausführbares Glas mit Gradle erstellen?
(Memo) Holen Sie sich mit Hilfe von Gradle eine Reihe von abhängigen Bibliotheksgläsern
Erstellen Sie mit dem Befehl eine JAR-Datei
Generieren Sie die DB-Dokumentation mit SchemaSpy in Gradle
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
So geben Sie ein Glas mit der von gradle in IntellijIDEA angegebenen Hauptklasse aus