Skip to content

Commit 3b2ea01

Browse files
committed
jooby-run: Resource [logback.xml] occurs multiple times on the classpath
- fix #3793
1 parent b9fdae4 commit 3b2ea01

File tree

2 files changed

+27
-16
lines changed

2 files changed

+27
-16
lines changed

modules/jooby-run/src/main/java/io/jooby/internal/run/JoobyModuleFinder.java

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
import static java.util.stream.Collectors.joining;
99
import static org.jboss.modules.ResourceLoaderSpec.createResourceLoaderSpec;
10-
import static org.jboss.modules.ResourceLoaders.createJarResourceLoader;
11-
import static org.jboss.modules.ResourceLoaders.createPathResourceLoader;
10+
import static org.jboss.modules.ResourceLoaders.*;
11+
import static org.jboss.modules.filter.PathFilters.not;
1212

1313
import java.io.File;
1414
import java.io.IOException;
@@ -23,12 +23,7 @@
2323
import java.util.Set;
2424
import java.util.jar.JarFile;
2525

26-
import org.jboss.modules.DependencySpec;
27-
import org.jboss.modules.ModuleDependencySpecBuilder;
28-
import org.jboss.modules.ModuleFinder;
29-
import org.jboss.modules.ModuleSpec;
30-
import org.jboss.modules.PathUtils;
31-
import org.jboss.modules.ResourceLoaderSpec;
26+
import org.jboss.modules.*;
3227
import org.jboss.modules.filter.PathFilters;
3328

3429
import io.jooby.run.JoobyRun;
@@ -73,15 +68,15 @@ private static Path joobyRunHook(Class loader) {
7368
}
7469
}
7570

76-
public static ModuleSpec createModuleSpec(
77-
String name, Set<Path> resources, Set<String> dependencies) {
71+
public ModuleSpec createModuleSpec(String name, Set<Path> resources, Set<String> dependencies) {
7872
ModuleSpec.Builder builder = newModule(name, resources);
7973

8074
// dependencies
8175
for (String dependency : dependencies) {
76+
var filter = PathFilters.acceptAll();
8277
builder.addDependency(
8378
new ModuleDependencySpecBuilder()
84-
.setImportFilter(PathFilters.acceptAll())
79+
.setImportFilter(filter)
8580
.setExportFilter(PathFilters.getMetaInfServicesFilter())
8681
.setName(dependency)
8782
.setOptional(false)
@@ -90,7 +85,7 @@ public static ModuleSpec createModuleSpec(
9085
return builder.create();
9186
}
9287

93-
private static ModuleSpec.Builder newModule(String name, Set<Path> resources) {
88+
private ModuleSpec.Builder newModule(String name, Set<Path> resources) {
9489
try {
9590
ModuleSpec.Builder builder = ModuleSpec.build(name);
9691
// Add all JDK classes
@@ -102,8 +97,20 @@ private static ModuleSpec.Builder newModule(String name, Set<Path> resources) {
10297

10398
for (Path path : resources) {
10499
if (Files.isDirectory(path)) {
105-
builder.addResourceRoot(
106-
ResourceLoaderSpec.createResourceLoaderSpec(createPathResourceLoader(path)));
100+
var resourceLoader = createPathResourceLoader(path);
101+
if (main.equals(name)) {
102+
resourceLoader =
103+
createFilteredResourceLoader(
104+
not(
105+
it ->
106+
// remove duplicated log configuration
107+
(it.startsWith("logback") || it.startsWith("log4j"))
108+
&& it.endsWith(".xml")
109+
// remove duplicated configuration
110+
|| (it.startsWith("application") && it.endsWith(".conf"))),
111+
resourceLoader);
112+
}
113+
builder.addResourceRoot(ResourceLoaderSpec.createResourceLoaderSpec(resourceLoader));
107114
} else {
108115
builder.addResourceRoot(
109116
createResourceLoaderSpec(createJarResourceLoader(new JarFile(path.toFile()))));
@@ -117,7 +124,7 @@ private static ModuleSpec.Builder newModule(String name, Set<Path> resources) {
117124

118125
@Override
119126
public String toString() {
120-
return "classes: "
127+
return "main: "
121128
+ classes.stream().map(Path::toString).collect(joining(File.pathSeparator))
122129
+ "\nresources: "
123130
+ resources.stream().map(Path::toString).collect(joining(File.pathSeparator))

modules/jooby-run/src/main/java/io/jooby/internal/run/JoobyMultiModuleFinder.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
/**
1717
* The new class loader since 3.x. It creates 3 modules with their own classloader:
1818
*
19-
* <p>- classes: project classes - resources: project resources - jars: project dependencies
19+
* <ul>
20+
* <li>classes: project classes
21+
* <li>resources: project resources
22+
* <li>jars: project dependencies
23+
* </ul>
2024
*
2125
* <p>This approach reduce memory footprint allowing fast restart.
2226
*/

0 commit comments

Comments
 (0)