Page 1 of 1

Gibt es eine Möglichkeit, bestimmte Klassen von der Jar -Aufgabe von Gradle abzuschließen?

Posted: 09 Apr 2025, 00:41
by Anonymous
Ich habe mein eigenes Gradle -Plugin entwickelt und muss einige Klassen aus dem Verzeichnis für Standardklassen überspringen und stattdessen meine Bündel bündeln. Ich habe es geschafft, dies zu "tun", indem ich die Ausgangsverzeichnisse von Quellsätzen geändert habe, aber dies bricht viele Dinge in unserer Build-Kette aus. Derzeit versuche ich, Klassen auszuschließen, wenn sie im modifizierten Quellsatz existieren, aber sie scheinen nicht ausgeschlossen zu sein. Es ist, als würde Gradle die Klassen standardmäßig kopieren und dann meinen Ausschlussverschluss verarbeitet.

Code: Select all

tasks.named("jar") {
from(sourceSets.main.get().output) {
exclude("*")
}
}
< /code>
Ich habe auch versucht: < /p>
jar.from(freshTree, copySpec -> {
copySpec.eachFile(file -> {
System.out.println("[CUSTOM] adding: " + file.getRelativePath().getPathString());
});
});

jar.from(sourceSet.getOutput(), copySpec -> {
copySpec.exclude(details -> {
Set altClassNames = freshTree.get().getFiles().stream()
.map(file -> {
String relative = project.relativePath(file);
return relative.replace(File.separatorChar, '/');
})
.map(str -> {
String loc = "build/weaved-classes/java/" + sourceSetName + "/";
int idx = str.indexOf(loc);
return idx >= 0 ? str.substring(idx + loc.length()) : str;
})
.collect(Collectors.toSet());

String archivePath = details.getRelativePath().getPathString();
boolean shouldSkip = altClassNames.contains(archivePath);

System.out.println((shouldSkip ? "[SOURCESET] skipped: " : "[SOURCESET] included: ") + archivePath);

return true; // debug purposes, skip all files
});

copySpec.setDuplicatesStrategy(DuplicatesStrategy.EXCLUDE);
});
< /code>
Leider schlägt es fehl: < /p>
> Task :jar FAILED
[SOURCESET] included: com
[SOURCESET] included: main
[SOURCESET] included: com
[SOURCESET] included: integration
[SOURCESET] included: com
[SOURCESET] included: test
[CUSTOM] adding: some/package/MyClazz.class

...

> Entry some/package/MyClazz.class is a duplicate but no duplicate handling strategy has been set.
Vorzugsweise kann ich dies in meinem Gradle -Plugin tun.>