Gradle “Eintrag .classpath ist ein Duplikat, aber es wurde keine Duplikatbehandlungsstrategie festgelegt”

Lesezeit: 4 Minuten

Benutzeravatar von 136
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;

tasks.withType<Jar>() {

    duplicatesStrategy = DuplicatesStrategy.EXCLUDE

    manifest {
        attributes["Main-Class"] = "MainKt"
    }

    configurations["compileClasspath"].forEach { file: File ->
        from(zipTree(file.absoluteFile))
    }
}

  • wie können Konflikte sein MERGED?

    – Prayagupa

    14. September 2021 um 22:44 Uhr

  • Hinzugefügt duplicatesStrategy = DuplicatesStrategy.EXCLUDE und es funktioniert! Magie!

    – benone

    27. November 2022 um 11:59 Uhr

Benutzeravatar von Marina Mikilchenko
Marina Michilchenko

jar {
   duplicatesStrategy(DuplicatesStrategy.EXCLUDE)
}

  • Für Leute, die das Spring Boot-Plug-in verwenden: replace jar mit bootJar.

    – neu

    15. März um 11:49 Uhr

Benutzeravatar von Morteza
Morteza

Bitte fügen Sie dies hinzu

tasks.withType(Copy).all { duplicatesStrategy 'exclude' }

Im build.gradle Datei hat es dann gelöst.

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

tasks.withType<Jar> { duplicatesStrategy = DuplicatesStrategy.INHERIT }

  • 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

Benutzeravatar von yatsvic
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

Benutzeravatar von Kirill
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()])
                }
        }
    }
}

Ich habe den gleichen Fehler mit Gradle 7:

Der Eintrag my-app.properties ist ein Duplikat, aber es wurde keine Duplikatbehandlungsstrategie festgelegt. Bitte beziehen Sie sich auf https://docs.gradle.org/7.1/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy für Details.

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.

1449890cookie-checkGradle “Eintrag .classpath ist ein Duplikat, aber es wurde keine Duplikatbehandlungsstrategie festgelegt”

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy