From 1447dec3c913bd6cade3dbcd4019d021c9047d61 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Thu, 1 Nov 2018 21:36:19 -0700 Subject: [PATCH 1/2] --patch-module so that resources are loaded correctly in tests --- .../org/javamodularity/moduleplugin/tasks/TestTask.java | 5 ++++- .../src/main/java/examples/greeter/Friendly.java | 9 ++++++++- .../greeter.provider/src/main/resources/greeting.txt | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 test-project/greeter.provider/src/main/resources/greeting.txt diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/TestTask.java b/src/main/java/org/javamodularity/moduleplugin/tasks/TestTask.java index b27fa61..d52d0ee 100644 --- a/src/main/java/org/javamodularity/moduleplugin/tasks/TestTask.java +++ b/src/main/java/org/javamodularity/moduleplugin/tasks/TestTask.java @@ -24,6 +24,7 @@ public void configureTestJava(Project project, String moduleName) { JavaPluginConvention javaConvention = project.getConvention().getPlugin(JavaPluginConvention.class); SourceSet testSourceSet = javaConvention.getSourceSets().getByName(SourceSet.TEST_SOURCE_SET_NAME); + SourceSet mainSourceSet = javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); testJava.getExtensions().create("moduleOptions", TestModuleOptions.class, project); testJava.doFirst(task -> { @@ -38,7 +39,9 @@ public void configureTestJava(Project project, String moduleName) { args.addAll(List.of( "--module-path", testJava.getClasspath().getAsPath(), - "--patch-module", moduleName + "=" + testSourceSet.getJava().getOutputDir().toPath(), + "--patch-module", moduleName + "=" + testSourceSet.getJava().getOutputDir().toPath() + + ":" + mainSourceSet.getOutput().getResourcesDir().toPath() + + ":" + testSourceSet.getOutput().getResourcesDir().toPath(), "--add-modules", "ALL-MODULE-PATH" )); diff --git a/test-project/greeter.provider/src/main/java/examples/greeter/Friendly.java b/test-project/greeter.provider/src/main/java/examples/greeter/Friendly.java index 13c14c8..f0114cd 100644 --- a/test-project/greeter.provider/src/main/java/examples/greeter/Friendly.java +++ b/test-project/greeter.provider/src/main/java/examples/greeter/Friendly.java @@ -1,10 +1,17 @@ package examples.greeter; import examples.greeter.api.Greeter; +import java.io.*; +import java.util.*; public class Friendly implements Greeter { @Override public String hello() { - return "Hello and welcome!"; + var stream = this.getClass().getResourceAsStream("/greeting.txt"); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"))) { + return reader.readLine(); + } catch (Exception e) { + throw new RuntimeException(e); + } } } diff --git a/test-project/greeter.provider/src/main/resources/greeting.txt b/test-project/greeter.provider/src/main/resources/greeting.txt new file mode 100644 index 0000000..b6cbc2d --- /dev/null +++ b/test-project/greeter.provider/src/main/resources/greeting.txt @@ -0,0 +1 @@ +welcome \ No newline at end of file From cb0d3d909fc8daef778adb7f760dcc05f5ac5d1d Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Thu, 1 Nov 2018 21:54:57 -0700 Subject: [PATCH 2/2] --patch-module for run task so that resources from the runnable module itself will be loaded correctly. This is necessary because the run task runs from exploded file structure, not for the JARs. --- .../org/javamodularity/moduleplugin/tasks/RunTask.java | 9 ++++++++- .../greeter.runner/src/main/java/examples/Runner.java | 5 +++++ .../greeter.runner/src/main/resources/resourcetest.txt | 0 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test-project/greeter.runner/src/main/resources/resourcetest.txt diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/RunTask.java b/src/main/java/org/javamodularity/moduleplugin/tasks/RunTask.java index 46e7f2a..510c424 100644 --- a/src/main/java/org/javamodularity/moduleplugin/tasks/RunTask.java +++ b/src/main/java/org/javamodularity/moduleplugin/tasks/RunTask.java @@ -5,7 +5,9 @@ import org.gradle.api.logging.Logger; import org.gradle.api.logging.Logging; import org.gradle.api.plugins.ApplicationPlugin; +import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.JavaExec; +import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.application.CreateStartScripts; import java.io.File; @@ -72,8 +74,13 @@ private void updateStartScriptsTask(Project project, JavaExec execTask, String m private void updateJavaExecTask(JavaExec execTask, String moduleName) { execTask.doFirst(task -> { + JavaPluginConvention javaConvention = execTask.getProject().getConvention().getPlugin(JavaPluginConvention.class); + + SourceSet mainSourceSet = javaConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); + var moduleJvmArgs = new ArrayList<>(List.of( - "--module-path", execTask.getClasspath().getAsPath()) + "--module-path", execTask.getClasspath().getAsPath(), + "--patch-module", moduleName + "=" + mainSourceSet.getOutput().getResourcesDir().toPath()) ); if (!moduleName.isEmpty()) { moduleJvmArgs.addAll(List.of( diff --git a/test-project/greeter.runner/src/main/java/examples/Runner.java b/test-project/greeter.runner/src/main/java/examples/Runner.java index db5607b..1a39641 100644 --- a/test-project/greeter.runner/src/main/java/examples/Runner.java +++ b/test-project/greeter.runner/src/main/java/examples/Runner.java @@ -9,6 +9,11 @@ public static void main(String[] args) { Greeter greeter = ServiceLoader.load(Greeter.class).findFirst().orElseThrow(() -> new RuntimeException("No Greeter found!")); System.out.println(greeter.hello()); + var resource = Runner.class.getResourceAsStream("/resourcetest.txt"); + if(resource == null) { + throw new RuntimeException("Couldn't load resource"); + } + ModuleLayer.boot().modules().stream() .map(Module::getName) .filter(m -> m.equals("java.sql")) diff --git a/test-project/greeter.runner/src/main/resources/resourcetest.txt b/test-project/greeter.runner/src/main/resources/resourcetest.txt new file mode 100644 index 0000000..e69de29