Gradle “Eintrag .classpath ist ein Duplikat, aber es wurde keine Duplikatbehandlungsstrategie festgelegt”
Lesezeit: 4 Minuten
136
Ich versuche, ein Gradle-Projekt zu erstellen, aber wenn ich es versuche $ gradle build Ich bekomme folgende Ausgabe:
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :jar FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':jar'.
> Entry .classpath is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.0/dsl/org.gradle.api.file.CopySpec.html#org.gradle.api.file.CopySpec:duplicatesStrategy for details.
* 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 11s
4 actionable tasks: 2 executed, 2 up-to-date
Danach Get-ChildItem -Path ./ -Filter .classpath -Recurse -Force Ich kam zu dem Schluss, dass ich nicht einmal eine einzige Datei mit dem Namen habe .classpath in meinem Projekt. Was kann ich tun?
Wenn Sie Linux oder OSX verwenden, versuchen Sie Folgendes: find . -name .classpath -type f im Stammordner Ihres Projekts
– tim_yates
26. April 2021 um 10:57 Uhr
Habe das gerade überprüft. Ich habe keine .classpath in meinem Projekt
– 136
26. April 2021 um 11:19 Uhr
Beachten Sie auch, dass, wenn der Fehler etwa eine ist Entry classpath.index anstatt .classpath (Google zeigt diese Frage dann als erste Antwort), es ist ein Problem, das von intellij verursacht wird. sehen: github.com/gradle/gradle/issues/17236. Der “Eintrag” ist eigentlich eine Datei, die mit gleichem Namen in verschiedenen Ordnern existiert, dies geht aus der Fehlermeldung nicht ganz hervor.
– Daniel Alder
10. Januar um 10:06 Uhr
@DanielAlder, danke für deinen Kommentar. Es hat mir sehr geholfen. Ich hatte genau dieses Problem.
– Herr BoFrost
12. Januar um 8:19 Uhr
Ähnlich wie bei @korn answer habe ich meine mit der gelöst EXCLUDE Strategie;
Bitte vermeiden Sie es, eine Antwort mit zu beginnen Ich habe das gleiche Problem weil Sie riskieren, dass es als “Keine Antwort” gekennzeichnet wird. Verwenden Sie stattdessen einen positiveren Text wie Um das Problem zu lösen, sollten Sie …..
– Steve
20. Juni 2022 um 9:49 Uhr
task.withType funktioniert bei mir nicht, diese Kopie schon
– Mi
25. November 2022 um 9:13 Uhr
Ich hatte die gleichen Probleme beim Ausführen einiger Tests in IntelliJ. Was mir geholfen hat, war nur ein einfacher Lauf gradle clean.
Ich hatte das gleiche Problem beim Erstellen mit Kotlin und Gradle 7. Beheben Sie das Problem, indem Sie den folgenden Code zu Ihrem hinzufügen build.gradle.kts.
INHERIT hat bei mir aber nicht funktioniert EXCLUDE tat.
– Brian Weiß
13. Februar um 3:27
DuplicatesStrategy.INHERIT ist in Gradle 7 bereits die Vorgabe – docs.gradle.org/7.5.1/dsl/…so dass es möglicherweise keinen Unterschied macht, ihn erneut auf denselben Wert zu setzen
– Devatherock
7. April um 16:24 Uhr
jatsvic
Wenn Sie Kotlin DSL und Gradle 7.0 verwenden, kann dies an diesem Fehler liegen KT-46165
Es sollte in Version 1.5.0 behoben sein.
INHERIT hat bei mir aber nicht funktioniert EXCLUDE tat.
– Brian Weiß
13. Februar um 3:27
DuplicatesStrategy.INHERIT ist in Gradle 7 bereits die Vorgabe – docs.gradle.org/7.5.1/dsl/…so dass es möglicherweise keinen Unterschied macht, ihn erneut auf denselben Wert zu setzen
– Devatherock
7. April um 16:24 Uhr
Kirill
Kenne deinen Fall nicht mit .classpath Datei, die Sie nicht einmal finden können (wie ich weiß, wird diese Datei normalerweise mit Eclipse IDE erstellt, die ich nicht verwende)
Aber ich hatte den gleichen Fehler beim Aktualisieren der Spring Boot-App auf Gradle 7.x. Mein Build-Skript musste zusätzliche Ressourcen verarbeiten, um Aufgaben zu unterstützen @..@-Stil Platzhalter (wie Spring Boot Maven Build funktioniertweil ich im Moment beide Build-Systeme im Projekt unterstütze und sie sich gleich verhalten muss):
processResources {
with copySpec {
from 'src/main/resources'
include 'my-app*.yml'
include 'my-app*.yaml'
include 'my-app*.properties'
project.properties.findAll().each {
prop ->
if (prop.value != null) {
filter(ReplaceTokens, tokens: [(prop.key): prop.value.toString()])
}
}
}
}
Und tatsächlich gibt es ein Duplikat. Gradle kopiert zunächst die unbearbeitete Datei nach build/resources/main und versucht später, meinen Brauch auszuführen processResources und kopieren Sie die Dateien erneut an denselben Ort.
Die Lösung wurde hinzugefügt duplicatesStrategy = 'include' Zu with copySpec {} Block. Sieht so aus, als hätte Gradle das Duplikat zuvor stillschweigend überschrieben, sodass es kein Problem gab.
14498900cookie-checkGradle “Eintrag .classpath ist ein Duplikat, aber es wurde keine Duplikatbehandlungsstrategie festgelegt”yes
Wenn Sie Linux oder OSX verwenden, versuchen Sie Folgendes:
find . -name .classpath -type f
im Stammordner Ihres Projekts– tim_yates
26. April 2021 um 10:57 Uhr
Habe das gerade überprüft. Ich habe keine
.classpath
in meinem Projekt– 136
26. April 2021 um 11:19 Uhr
Beachten Sie auch, dass, wenn der Fehler etwa eine ist
Entry classpath.index
anstatt.classpath
(Google zeigt diese Frage dann als erste Antwort), es ist ein Problem, das von intellij verursacht wird. sehen: github.com/gradle/gradle/issues/17236. Der “Eintrag” ist eigentlich eine Datei, die mit gleichem Namen in verschiedenen Ordnern existiert, dies geht aus der Fehlermeldung nicht ganz hervor.– Daniel Alder
10. Januar um 10:06 Uhr
@DanielAlder, danke für deinen Kommentar. Es hat mir sehr geholfen. Ich hatte genau dieses Problem.
– Herr BoFrost
12. Januar um 8:19 Uhr