Skip to content

Commit 7c87076

Browse files
committed
requires runtime: put synthetic 'module-info' in 'compileOnly' scope
1 parent 0dd0ced commit 7c87076

File tree

4 files changed

+14
-77
lines changed

4 files changed

+14
-77
lines changed

src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.gradlex.javamodule.dependencies;
1818

1919
import org.gradle.api.Project;
20-
import org.gradle.api.Task;
2120
import org.gradle.api.artifacts.Configuration;
2221
import org.gradle.api.artifacts.ConfigurationContainer;
2322
import org.gradle.api.artifacts.Dependency;
@@ -41,9 +40,9 @@
4140
import org.gradle.api.tasks.SourceSetContainer;
4241
import org.gradle.api.tasks.compile.JavaCompile;
4342
import org.gradle.api.tasks.javadoc.Javadoc;
44-
import org.gradlex.javamodule.dependencies.internal.compile.AddSyntheticModulesToCompileClasspathAction;
4543
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo;
4644
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoCache;
45+
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoClassCreator;
4746

4847
import javax.inject.Inject;
4948
import java.io.File;
@@ -385,7 +384,9 @@ private Dependency createDependency(String project) {
385384
* @return collection of folders containing synthetic module-info.class files
386385
*/
387386
public FileCollection addRequiresRuntimeSupport(JavaCompile task, SourceSet sourceSet) {
388-
return doAddRequiresRuntimeSupport(task, sourceSet);
387+
Optional<SourceSet> sourceSetForClasspath = getSourceSets().stream().filter(s -> s.getCompileJavaTaskName().equals(task.getName())).findFirst();
388+
sourceSetForClasspath.ifPresent(s -> doAddRequiresRuntimeSupport(sourceSet, s));
389+
return getObjects().fileCollection(); // no-op
389390
}
390391

391392
/**
@@ -397,19 +398,20 @@ public FileCollection addRequiresRuntimeSupport(JavaCompile task, SourceSet sour
397398
* @return collection of folders containing synthetic module-info.class files
398399
*/
399400
public FileCollection addRequiresRuntimeSupport(Javadoc task, SourceSet sourceSet) {
400-
return doAddRequiresRuntimeSupport(task, sourceSet);
401+
return getObjects().fileCollection(); // no-op
401402
}
402403

403-
FileCollection doAddRequiresRuntimeSupport(Task task, SourceSet sourceSet) {
404-
List<String> requiresRuntime = getModuleInfoCache().get(sourceSet).get(ModuleInfo.Directive.REQUIRES_RUNTIME);
404+
void doAddRequiresRuntimeSupport(SourceSet sourceSetForModuleInfo, SourceSet sourceSetForClasspath) {
405+
List<String> requiresRuntime = getModuleInfoCache().get(sourceSetForModuleInfo).get(ModuleInfo.Directive.REQUIRES_RUNTIME);
405406
ConfigurableFileCollection syntheticModuleInfoFolders = getObjects().fileCollection();
406407
if (!requiresRuntime.isEmpty()) {
407-
Provider<Directory> tmpDir = getLayout().getBuildDirectory().dir("tmp/java-module-dependencies/" + task.getName());
408+
Provider<Directory> tmpDir = getLayout().getBuildDirectory().dir("tmp/java-module-dependencies");
408409
requiresRuntime.forEach(moduleName -> syntheticModuleInfoFolders.from(tmpDir.map(dir -> dir.dir(moduleName))));
409-
task.doFirst(getObjects().newInstance(AddSyntheticModulesToCompileClasspathAction.class, syntheticModuleInfoFolders));
410-
return syntheticModuleInfoFolders;
410+
for (File moduleFolder : syntheticModuleInfoFolders) {
411+
ModuleInfoClassCreator.createEmpty(moduleFolder);
412+
}
413+
getDependencies().add(sourceSetForClasspath.getCompileOnlyConfigurationName(), syntheticModuleInfoFolders);
411414
}
412-
return syntheticModuleInfoFolders;
413415
}
414416

415417
private <T> Provider<T> errorIfNotFound(String moduleName) {

src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@
5151
import static org.gradlex.javamodule.dependencies.JavaModuleDependenciesExtension.JAVA_MODULE_DEPENDENCIES;
5252
import static org.gradlex.javamodule.dependencies.internal.utils.DependencyDeclarationsUtil.declaredDependencies;
5353
import static org.gradlex.javamodule.dependencies.internal.utils.ModuleNamingUtil.sourceSetToModuleName;
54-
import static org.gradlex.javamodule.dependencies.internal.utils.TaskConfigurationUtil.isJavaCompileTask;
55-
import static org.gradlex.javamodule.dependencies.internal.utils.TaskConfigurationUtil.isJavadocTask;
5654

5755
@SuppressWarnings("unused")
5856
@NonNullApi
@@ -84,11 +82,7 @@ private void setupForJavaProject(Project project, JavaModuleDependenciesExtensio
8482
process(ModuleInfo.Directive.REQUIRES_STATIC_TRANSITIVE, sourceSet.getCompileOnlyApiConfigurationName(), sourceSet, project, javaModuleDependencies);
8583
process(ModuleInfo.Directive.REQUIRES_RUNTIME, sourceSet.getRuntimeOnlyConfigurationName(), sourceSet, project, javaModuleDependencies);
8684

87-
project.getTasks().configureEach(task -> {
88-
if (isJavaCompileTask(task, sourceSet) || isJavadocTask(task, sourceSet)) {
89-
javaModuleDependencies.doAddRequiresRuntimeSupport(task, sourceSet);
90-
}
91-
});
85+
javaModuleDependencies.doAddRequiresRuntimeSupport(sourceSet, sourceSet);
9286
});
9387

9488
TaskProvider<Task> checkAllModuleInfo = project.getTasks().register("checkAllModuleInfo", t -> {

src/main/java/org/gradlex/javamodule/dependencies/internal/compile/AddSyntheticModulesToCompileClasspathAction.java

Lines changed: 0 additions & 59 deletions
This file was deleted.

src/test/groovy/org/gradlex/javamodule/dependencies/test/RequiresRuntimeTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class RequiresRuntimeTest extends Specification {
3636
def cp = printCompileJars()
3737

3838
then:
39-
cp.output.contains('[slf4j-api-2.0.3.jar]')
39+
cp.output.contains('[org.slf4j.simple, slf4j-api-2.0.3.jar]') // 'org.slf4j.simple' is the folder nam of synthetic 'module-info.class'
4040
}
4141

4242
def "compiles with runtime only dependencies in module-info"() {

0 commit comments

Comments
 (0)