Skip to content

Commit a4a590a

Browse files
committed
Improve support for 'requires runtime' in javadoc task
#20
1 parent a8acf91 commit a4a590a

File tree

5 files changed

+38
-16
lines changed

5 files changed

+38
-16
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-rc-3-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.gradle.api.tasks.SourceSet;
3434
import org.gradle.api.tasks.SourceSetContainer;
3535
import org.gradle.api.tasks.TaskProvider;
36-
import org.gradle.api.tasks.compile.JavaCompile;
3736
import org.gradle.util.GradleVersion;
3837
import org.gradlex.javamodule.dependencies.internal.bridges.ExtraJavaModuleInfoBridge;
3938
import org.gradlex.javamodule.dependencies.internal.compile.AddSyntheticModulesToCompileClasspathAction;
@@ -55,6 +54,8 @@
5554
import static org.gradlex.javamodule.dependencies.internal.utils.ModuleNamingUtil.sourceSetToModuleName;
5655
import static java.util.Optional.empty;
5756
import static org.gradle.api.plugins.HelpTasksPlugin.HELP_GROUP;
57+
import static org.gradlex.javamodule.dependencies.internal.utils.TaskConfigurationUtil.isJavaCompileTask;
58+
import static org.gradlex.javamodule.dependencies.internal.utils.TaskConfigurationUtil.isJavadocTask;
5859

5960
@SuppressWarnings("unused")
6061
@NonNullApi
@@ -88,12 +89,14 @@ private void setupForJavaProject(Project project, JavaModuleDependenciesExtensio
8889
process(ModuleInfo.Directive.REQUIRES_STATIC_TRANSITIVE, sourceSet.getCompileOnlyApiConfigurationName(), sourceSet, project, javaModuleDependencies);
8990
process(ModuleInfo.Directive.REQUIRES_RUNTIME, sourceSet.getRuntimeOnlyConfigurationName(), sourceSet, project, javaModuleDependencies);
9091

91-
project.getTasks().named(sourceSet.getCompileJavaTaskName(), JavaCompile.class, javaCompile -> {
92-
ModuleInfo moduleInfo = findModuleInfoInSourceSet(sourceSet, project);
93-
List<String> requiresRuntime = moduleInfo.get(ModuleInfo.Directive.REQUIRES_RUNTIME);
94-
if (!requiresRuntime.isEmpty()) {
95-
javaCompile.doFirst(project.getObjects().newInstance(AddSyntheticModulesToCompileClasspathAction.class,
96-
project.getLayout().getBuildDirectory().dir("tmp").get().getAsFile(), requiresRuntime));
92+
project.getTasks().configureEach(task -> {
93+
if (isJavaCompileTask(task, sourceSet) || isJavadocTask(task, sourceSet)) {
94+
List<String> requiresRuntime =
95+
findModuleInfoInSourceSet(sourceSet, project).get(ModuleInfo.Directive.REQUIRES_RUNTIME);
96+
if (!requiresRuntime.isEmpty()) {
97+
task.doFirst(project.getObjects().newInstance(AddSyntheticModulesToCompileClasspathAction.class,
98+
project.getLayout().getBuildDirectory().dir("tmp/java-module-dependencies/" + task.getName()).get().getAsFile(), requiresRuntime));
99+
}
97100
}
98101
});
99102
});

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.gradle.api.file.ConfigurableFileCollection;
2323
import org.gradle.api.model.ObjectFactory;
2424
import org.gradle.api.tasks.compile.JavaCompile;
25+
import org.gradle.api.tasks.javadoc.Javadoc;
2526
import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoClassCreator;
2627

2728
import javax.inject.Inject;
@@ -48,15 +49,20 @@ public void execute(Task task) {
4849
return;
4950
}
5051

51-
JavaCompile javaCompile = (JavaCompile) task;
52-
5352
ConfigurableFileCollection syntheticModuleInfoFolders = objects.fileCollection();
5453
for (String moduleName : moduleDependencies) {
55-
File dir = new File(tmpFolder, "java-module-dependencies/" + moduleName + "-synthetic");
54+
File dir = new File(tmpFolder, moduleName + "-synthetic");
5655
ModuleInfoClassCreator.createEmpty(moduleName, dir);
5756
syntheticModuleInfoFolders.from(dir);
5857
}
5958

60-
javaCompile.setClasspath(javaCompile.getClasspath().plus(syntheticModuleInfoFolders));
59+
if (task instanceof JavaCompile) {
60+
JavaCompile javaCompile = (JavaCompile) task;
61+
javaCompile.setClasspath(javaCompile.getClasspath().plus(syntheticModuleInfoFolders));
62+
}
63+
if (task instanceof Javadoc) {
64+
Javadoc javadoc = (Javadoc) task;
65+
javadoc.setClasspath(javadoc.getClasspath().plus(syntheticModuleInfoFolders));
66+
}
6167
}
6268
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.gradlex.javamodule.dependencies.internal.utils;
2+
3+
import org.gradle.api.Task;
4+
import org.gradle.api.tasks.SourceSet;
5+
import org.gradle.api.tasks.compile.JavaCompile;
6+
import org.gradle.api.tasks.javadoc.Javadoc;
7+
8+
public class TaskConfigurationUtil {
9+
10+
public static boolean isJavaCompileTask(Task task, SourceSet sourceSet) {
11+
return task instanceof JavaCompile && task.getName().equals(sourceSet.getCompileJavaTaskName());
12+
}
13+
14+
public static boolean isJavadocTask(Task task, SourceSet sourceSet) {
15+
return task instanceof Javadoc && task.getName().equals(sourceSet.getJavadocTaskName());
16+
}
17+
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,6 @@ class RequiresRuntimeTest extends Specification {
127127
implementation(gav("org.slf4j.simple", "2.0.3"))
128128
}
129129
}
130-
// TODO ideally, this should not be necessary
131-
tasks.javadoc {
132-
classpath = sourceSets.main.get().runtimeClasspath
133-
}
134130
'''
135131
appModuleInfoFile << '''
136132
module org.gradlex.test.app {

0 commit comments

Comments
 (0)