diff --git a/src/main/java/bee/task/Jar.java b/src/main/java/bee/task/Jar.java index 724a90bd7..aaf1a9bb2 100644 --- a/src/main/java/bee/task/Jar.java +++ b/src/main/java/bee/task/Jar.java @@ -10,6 +10,7 @@ package bee.task; import java.io.ByteArrayInputStream; +import java.util.function.Function; import java.util.jar.Attributes.Name; import javax.lang.model.SourceVersion; @@ -49,6 +50,16 @@ public class Jar extends Task { */ protected boolean removeTraceInfo = false; + /** + * Configure how to handle your resources when creating project jar. + */ + protected Function packing = Function.identity(); + + /** + * Configure how to handle merged resources when merging dependent jars. + */ + protected Function merging = Function.identity(); + /** * Package main classes and other resources. */ @@ -61,8 +72,8 @@ public void source() { dir = modify(dir); } - pack("main classe", I.signal(dir), project.locateJar()); - pack("main source", project.getSourceSet(), project.locateSourceJar()); + pack("main classe", I.signal(dir), project.locateJar(), packing); + pack("main source", project.getSourceSet(), project.locateSourceJar(), null); } /** @@ -113,8 +124,8 @@ public void test() { File classes = project.getOutput().file(project.getProduct() + "-" + project.getVersion() + "-tests.jar"); File sources = project.getOutput().file(project.getProduct() + "-" + project.getVersion() + "-tests-sources.jar"); - pack("test class", I.signal(project.getTestClasses()), classes); - pack("test source", project.getTestSourceSet(), sources); + pack("test class", I.signal(project.getTestClasses()), classes, null); + pack("test source", project.getTestSourceSet(), sources, null); } /** @@ -127,8 +138,8 @@ public void project() { File classes = project.getOutput().file(project.getProduct() + "-" + project.getVersion() + "-projects.jar"); File sources = project.getOutput().file(project.getProduct() + "-" + project.getVersion() + "-projects-sources.jar"); - pack("project class", I.signal(project.getProjectClasses()), classes); - pack("project source", project.getProjectSourceSet(), sources); + pack("project class", I.signal(project.getProjectClasses()), classes, null); + pack("project source", project.getProjectSourceSet(), sources, null); } /** @@ -138,7 +149,7 @@ public void project() { public void document() { Directory output = require(Doc::javadoc); - pack("javadoc", I.signal(output), project.locateJavadocJar()); + pack("javadoc", I.signal(output), project.locateJavadocJar(), null); } /** @@ -148,11 +159,12 @@ public void document() { * @param input * @param output */ - private void pack(String type, Signal input, File output) { + private void pack(String type, Signal input, File output, Function option) { input = input.skipNull(); + option = option == null ? Function.identity() : option; Locator.folder() - .add(input, Option::strip) + .add(input, option.andThen(Option::strip)) .trackPackingTo(output) .to(Inputs.observerFor(ui, output, "Packaging " + type + " files", "Build " + type + " jar")); } @@ -183,7 +195,7 @@ public void merge() { folder.add(manifest, o -> o.allocateIn("META-INF")); for (Library library : project.getDependency(Scope.Runtime)) { - folder.add(library.getLocalJar().asArchive()); + folder.add(library.getLocalJar().asArchive(), merging); } folder.trackPackingTo(output).to(Inputs.observerFor(ui, output, "Merging class files", "Build merged classes jar")); } diff --git a/src/project/java/bee/Install.java b/src/project/java/bee/Install.java index 5b948e06d..0f39359ad 100644 --- a/src/project/java/bee/Install.java +++ b/src/project/java/bee/Install.java @@ -10,7 +10,6 @@ package bee; import bee.api.Repository; -import bee.task.Jar; import bee.task.Test; import kiss.I; @@ -28,4 +27,10 @@ public void project() { BeeInstaller.install(true, true); } + + static class Jar extends bee.task.Jar { + { + merging = o -> o.glob("!licenses/**", "!META-INF/**"); + } + } } \ No newline at end of file