Есть ли способ исключить определенные классы из того, чтобы их поглощали задачу Gradle's JAR?JAVA

Программисты JAVA общаются здесь
Anonymous
Есть ли способ исключить определенные классы из того, чтобы их поглощали задачу Gradle's JAR?

Сообщение Anonymous »

Я разрабатывал свой собственный плагин Gradle, и мне нужно пропустить объединение некоторых классов из каталога классов по умолчанию и вместо этого объединить мой. Мне удалось «сделать» это, изменяя выходные каталоги исходных наборов, но это ломает много вещей в нашей цепочке сборки. В настоящее время я пытаюсь исключить занятия, если они существуют в измененном наборе источников, но они, похоже, не исключены. Это похоже на то, как Градл копирует классы по умолчанию, а затем обрабатывает мое исключение закрытия.

Код: Выделить всё

tasks.named("jar") {
from(sourceSets.main.get().output) {
exclude("*")
}
}
< /code>
Я также пытался: < /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>
К сожалению, он не удается: < /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.
Желательно, я могу сделать это в своем плагине Gradle.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... dles-jar-t

Вернуться в «JAVA»