diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d108ca4..3b3f72d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Java Module Dependencies Gradle Plugin - Changelog -## Version 1.9.3 +## Version 1.10 +* [#221](https://github.com/gradlex-org/java-module-dependencies/issues/221) Upgrade to Gradle 9, remove deprecated features * [#209](https://github.com/gradlex-org/java-module-dependencies/issues/209) Fix: configuration cache issue when building kotlin-dsl plugins * Update module name mappings diff --git a/build.gradle.kts b/build.gradle.kts index 4c3f922d..80894950 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -69,7 +69,7 @@ tasks.test { testing.suites.named("test") { useJUnitJupiter() - listOf("7.4", "7.6.5", "8.0.2").forEach { gradleVersionUnderTest -> + listOf("7.4", "7.6.5", "8.0.2", "8.14.3").forEach { gradleVersionUnderTest -> targets.register("test${gradleVersionUnderTest}") { testTask { group = LifecycleBasePlugin.VERIFICATION_GROUP diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55b..8bdaf60c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 78cb6e16..3e781fba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionSha256Sum=8fad3d78296ca518113f3d29016617c7f9367dc005f932bd9d93bf45ba46072b +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a93..ef07e016 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/samples/configuration-cache/lib/src/test/java/org/my/lib/test/MyLibTest.java b/samples/configuration-cache/lib/src/test/java/org/my/lib/test/MyLibTest.java new file mode 100644 index 00000000..1432a875 --- /dev/null +++ b/samples/configuration-cache/lib/src/test/java/org/my/lib/test/MyLibTest.java @@ -0,0 +1,7 @@ +package org.my.lib.test; + +class MyLibTest { + + @org.junit.jupiter.api.Test + void test() {} +} \ No newline at end of file diff --git a/samples/kotlin/lib/src/test/java/org/my/lib/test/MyLibTest.java b/samples/kotlin/lib/src/test/java/org/my/lib/test/MyLibTest.java new file mode 100644 index 00000000..1432a875 --- /dev/null +++ b/samples/kotlin/lib/src/test/java/org/my/lib/test/MyLibTest.java @@ -0,0 +1,7 @@ +package org.my.lib.test; + +class MyLibTest { + + @org.junit.jupiter.api.Test + void test() {} +} \ No newline at end of file diff --git a/samples/module-info-dsl-no-platform/gradle/plugins/build.gradle.kts b/samples/module-info-dsl-no-platform/gradle/plugins/build.gradle.kts index 5ce5bf52..7c122084 100644 --- a/samples/module-info-dsl-no-platform/gradle/plugins/build.gradle.kts +++ b/samples/module-info-dsl-no-platform/gradle/plugins/build.gradle.kts @@ -6,4 +6,5 @@ dependencies { implementation("com.autonomousapps:dependency-analysis-gradle-plugin:2.19.0") implementation("org.gradlex:java-module-dependencies:1.9.2") implementation("org.gradlex:java-module-testing:1.7") + implementation("org.gradlex:jvm-dependency-conflict-resolution:2.4") } \ No newline at end of file diff --git a/samples/module-info-dsl-no-platform/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts b/samples/module-info-dsl-no-platform/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts index f1280c29..d3c0b4ab 100644 --- a/samples/module-info-dsl-no-platform/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts +++ b/samples/module-info-dsl-no-platform/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts @@ -2,6 +2,7 @@ plugins { id("java") id("org.gradlex.java-module-dependencies") id("org.gradlex.java-module-testing") + id("org.gradlex.jvm-dependency-conflict-resolution") } group = "org.example" @@ -10,8 +11,15 @@ java.toolchain.languageVersion.set(JavaLanguageVersion.of(11)) testing.suites.register("testFunctional") tasks.check { dependsOn(tasks.named("testFunctional")) } -javaModuleDependencies { - versionsFromPlatformAndConsistentResolution(":app", ":app") +jvmDependencyConflicts { + consistentResolution { + providesVersions(":app") + } +} +dependencies { + implementation(platform(project(":app")) as ModuleDependency) { + capabilities { requireCapability("${project.group}:app-platform") } + } } tasks.withType().configureEach { diff --git a/samples/module-info-dsl/gradle/plugins/build.gradle.kts b/samples/module-info-dsl/gradle/plugins/build.gradle.kts index 5ce5bf52..7c122084 100644 --- a/samples/module-info-dsl/gradle/plugins/build.gradle.kts +++ b/samples/module-info-dsl/gradle/plugins/build.gradle.kts @@ -6,4 +6,5 @@ dependencies { implementation("com.autonomousapps:dependency-analysis-gradle-plugin:2.19.0") implementation("org.gradlex:java-module-dependencies:1.9.2") implementation("org.gradlex:java-module-testing:1.7") + implementation("org.gradlex:jvm-dependency-conflict-resolution:2.4") } \ No newline at end of file diff --git a/samples/module-info-dsl/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts b/samples/module-info-dsl/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts index 583b3665..090d33ce 100644 --- a/samples/module-info-dsl/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts +++ b/samples/module-info-dsl/gradle/plugins/src/main/kotlin/org.example.java-base.gradle.kts @@ -2,6 +2,7 @@ plugins { id("java") id("org.gradlex.java-module-dependencies") id("org.gradlex.java-module-testing") + id("org.gradlex.jvm-dependency-conflict-resolution") } group = "org.example" @@ -10,8 +11,11 @@ java.toolchain.languageVersion.set(JavaLanguageVersion.of(11)) testing.suites.register("testFunctional") tasks.check { dependsOn(tasks.named("testFunctional")) } -javaModuleDependencies { - versionsFromPlatformAndConsistentResolution(":versions", ":app") +jvmDependencyConflicts { + consistentResolution { + platform(":versions") + providesVersions(":app") + } } tasks.withType().configureEach { diff --git a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java index 03a937bf..f822b0a8 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java @@ -41,11 +41,11 @@ import org.gradle.api.provider.Provider; import org.gradle.api.provider.ProviderFactory; import org.gradle.api.tasks.SourceSet; -import org.gradle.api.tasks.SourceSetContainer; import org.gradle.api.tasks.TaskProvider; import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo; import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoCache; import org.gradlex.javamodule.dependencies.tasks.SyntheticModuleInfoFoldersGenerate; +import org.jspecify.annotations.Nullable; import javax.inject.Inject; import java.io.CharArrayReader; @@ -73,9 +73,8 @@ */ public abstract class JavaModuleDependenciesExtension { static final String JAVA_MODULE_DEPENDENCIES = "javaModuleDependencies"; - private static final String INTERNAL = "internal"; - private final VersionCatalogsExtension versionCatalogs; + private final @Nullable VersionCatalogsExtension versionCatalogs; public abstract Property getModuleInfoCache(); @@ -132,7 +131,7 @@ public abstract class JavaModuleDependenciesExtension { */ public abstract Property getAnalyseOnly(); - public JavaModuleDependenciesExtension(VersionCatalogsExtension versionCatalogs, File rootDir) { + public JavaModuleDependenciesExtension(@Nullable VersionCatalogsExtension versionCatalogs, File rootDir) { this.versionCatalogs = versionCatalogs; getModuleInfoCache().convention(getProviders().provider(() -> getObjects().newInstance(ModuleInfoCache.class, false))); getModulesProperties().set(new File(rootDir, "gradle/modules.properties")); @@ -198,7 +197,7 @@ private String toProjectName(String moduleNameSuffix) { List allProjectNames = getProject().getRootProject().getSubprojects().stream().map(Project::getName).collect(Collectors.toList()); Optional perfectMatch = allProjectNames.stream().filter(p -> p.replace("-", ".").equals(moduleNameSuffix)).findFirst(); - Optional existingProjectName = allProjectNames.stream().filter(p -> moduleNameSuffix != null && moduleNameSuffix.startsWith(p.replace("-", ".") + ".")) + Optional existingProjectName = allProjectNames.stream().filter(p -> moduleNameSuffix.startsWith(p.replace("-", ".") + ".")) .max(Comparator.comparingInt(String::length)); if (perfectMatch.isPresent()) { @@ -278,7 +277,7 @@ private Provider createWithGuessing(String moduleName, SourceSet sou }); } - private ModuleDependency createExternalDependency(String moduleName) { + private @Nullable ModuleDependency createExternalDependency(String moduleName) { Provider coordinates = getModuleNameToGA().getting(moduleName).orElse(mapByPrefix(getProviders().provider(() -> moduleName))); if (coordinates.isPresent()) { Map component; @@ -448,57 +447,6 @@ public Configuration versionsFromConsistentResolution(Collection version return mainRuntimeClasspath; } - /** - * @deprecated use the 'org.gradlex.jvm-dependency-conflict-resolution' plugin instead. - */ - @Deprecated - public Configuration versionsFromPlatformAndConsistentResolution(String platformProject, String... versionsProvidingProjects) { - return versionsFromPlatformAndConsistentResolution(platformProject, Arrays.asList(versionsProvidingProjects)); - } - - /** - * @deprecated use the 'org.gradlex.jvm-dependency-conflict-resolution' plugin instead. - */ - @Deprecated - public Configuration versionsFromPlatformAndConsistentResolution(String platformProject, Collection versionsProvidingProjects) { - boolean platformInJavaProject = versionsProvidingProjects.contains(platformProject); - - maybeCreateInternalConfiguration().withDependencies(d -> { - Dependency platformDependency = getDependencies().platform(createDependency(platformProject)); - if (platformInJavaProject) { - if (platformProject.startsWith(":")) { - String capability = ((ProjectDependency) platformDependency).getDependencyProject().getGroup() + platformProject + "-platform"; - ((ProjectDependency) platformDependency).capabilities(c -> c.requireCapability(capability)); - } else if (platformDependency instanceof ModuleDependency) { - String capability = platformProject + "-platform"; - ((ModuleDependency) platformDependency).capabilities(c -> c.requireCapability(capability)); - } - } - d.add(platformDependency); - }); - - getSourceSets().configureEach(sourceSet -> { - ConfigurationContainer configurations = getConfigurations(); - Configuration internal = configurations.getByName(INTERNAL); - configurations.getByName(sourceSet.getRuntimeClasspathConfigurationName()).extendsFrom(internal); - configurations.getByName(sourceSet.getCompileClasspathConfigurationName()).extendsFrom(internal); - configurations.getByName(sourceSet.getAnnotationProcessorConfigurationName()).extendsFrom(internal); - }); - - return versionsFromConsistentResolution(versionsProvidingProjects); - } - - private Configuration maybeCreateInternalConfiguration() { - Configuration internal = getConfigurations().findByName(INTERNAL); - if (internal != null) { - return internal; - } - return getConfigurations().create(INTERNAL, i -> { - i.setCanBeResolved(false); - i.setCanBeConsumed(false); - }); - } - private Dependency createDependency(String project) { boolean isProjectInBuild = project.startsWith(":"); return getDependencies().create(isProjectInBuild @@ -572,7 +520,4 @@ private Provider errorIfNotFound(Provider moduleName) { @Inject protected abstract ConfigurationContainer getConfigurations(); - - @Inject - protected abstract SourceSetContainer getSourceSets(); } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java index 23efb67f..c2157cd0 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesPlugin.java @@ -17,7 +17,6 @@ package org.gradlex.javamodule.dependencies; import org.gradle.api.GradleException; -import org.gradle.api.NonNullApi; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; @@ -64,7 +63,6 @@ import static org.gradlex.javamodule.dependencies.internal.utils.ModuleNamingUtil.sourceSetToModuleName; @SuppressWarnings("unused") -@NonNullApi public abstract class JavaModuleDependenciesPlugin implements Plugin { private static final String EXTRA_JAVA_MODULE_INFO_PLUGIN_ID = "org.gradlex.extra-java-module-info"; @@ -84,6 +82,7 @@ public void apply(ExtensionAware projectOrSettings) { private void applyProject(Project project) { VersionCatalogsExtension versionCatalogs = project.getExtensions().findByType(VersionCatalogsExtension.class); + @SuppressWarnings("DataFlowIssue") JavaModuleDependenciesExtension javaModuleDependencies = project.getExtensions().create( JAVA_MODULE_DEPENDENCIES, JavaModuleDependenciesExtension.class, versionCatalogs, project.getRootDir()); @@ -151,6 +150,7 @@ private void setupModuleDependenciesTask(Project project) { TaskProvider moduleDependencies = project.getTasks().register("moduleDependencies", ModuleDependencyReport.class, t -> t.setGroup(HELP_GROUP)); sourceSets.all(sourceSet -> moduleDependencies.configure(t -> { HashSet joined = new HashSet<>(); + //noinspection ConstantValue if (t.getConfigurations() != null) { joined.addAll(t.getConfigurations()); } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleVersionsPlugin.java b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleVersionsPlugin.java index f0193cb5..6d8b4c7d 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleVersionsPlugin.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/JavaModuleVersionsPlugin.java @@ -16,7 +16,6 @@ package org.gradlex.javamodule.dependencies; -import org.gradle.api.NonNullApi; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; @@ -30,8 +29,8 @@ import org.gradlex.javamodule.dependencies.dsl.ModuleVersions; import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo; import org.gradlex.javamodule.dependencies.tasks.CatalogGenerate; +import org.jspecify.annotations.Nullable; -import javax.annotation.Nullable; import java.io.File; import java.util.Arrays; import java.util.List; @@ -47,7 +46,6 @@ import static org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo.Directive.REQUIRES_TRANSITIVE; @SuppressWarnings("unused") -@NonNullApi public abstract class JavaModuleVersionsPlugin implements Plugin { @Override diff --git a/src/main/java/org/gradlex/javamodule/dependencies/SharedMappings.java b/src/main/java/org/gradlex/javamodule/dependencies/SharedMappings.java index c0be3e1f..6cb37b72 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/SharedMappings.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/SharedMappings.java @@ -16,6 +16,8 @@ package org.gradlex.javamodule.dependencies; +import org.jspecify.annotations.Nullable; + import java.io.IOException; import java.io.InputStream; import java.util.Map; @@ -27,7 +29,7 @@ final public class SharedMappings { static Map loadModuleNameToGAProperties() { Properties properties = new Properties() { @Override - public synchronized Object put(Object key, Object value) { + public synchronized @Nullable Object put(Object key, Object value) { if (get(key) != null) { throw new IllegalArgumentException(key + " already present."); } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/dsl/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/dsl/package-info.java new file mode 100644 index 00000000..133fb8a3 --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/dsl/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.dsl; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModuleDependenciesSettingsPlugin.java b/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModuleDependenciesSettingsPlugin.java index a8a5973a..01a69dc6 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModuleDependenciesSettingsPlugin.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModuleDependenciesSettingsPlugin.java @@ -17,12 +17,10 @@ package org.gradlex.javamodule.dependencies.initialization; import org.gradle.api.GradleException; -import org.gradle.api.NonNullApi; import org.gradle.api.Plugin; import org.gradle.api.initialization.Settings; import org.gradle.util.GradleVersion; -@NonNullApi public abstract class JavaModuleDependenciesSettingsPlugin implements Plugin { @Override diff --git a/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModulesExtension.java b/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModulesExtension.java index 3899ee96..2be9aae8 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModulesExtension.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/initialization/JavaModulesExtension.java @@ -18,7 +18,6 @@ import org.gradle.api.Action; import org.gradle.api.IsolatedAction; -import org.gradle.api.NonNullApi; import org.gradle.api.Project; import org.gradle.api.initialization.ProjectDescriptor; import org.gradle.api.initialization.Settings; @@ -35,6 +34,7 @@ import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo; import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoCache; import org.gradlex.javamodule.dependencies.internal.utils.ValueModuleDirectoryListing; +import org.jspecify.annotations.Nullable; import javax.inject.Inject; import java.io.File; @@ -165,11 +165,11 @@ private void configureModule(Module module, ProjectDescriptor project) { private static class ModuleProject { private final String path; - private final String group; + private final @Nullable String group; private final List plugins; - private final String mainModuleName; + private final @Nullable String mainModuleName; - public ModuleProject(String path, String group, List plugins, String mainModuleName) { + public ModuleProject(String path, @Nullable String group, List plugins, @Nullable String mainModuleName) { this.path = path; this.group = group; this.plugins = plugins; @@ -177,7 +177,6 @@ public ModuleProject(String path, String group, List plugins, String mai } } - @NonNullApi private static class ApplyPluginsAction implements IsolatedAction { private final List moduleProjects; @@ -205,7 +204,6 @@ public void execute(Project project) { } } - @NonNullApi private static class ApplyJavaModuleVersionsPluginAction implements IsolatedAction { private final String projectPath; diff --git a/src/main/java/org/gradlex/javamodule/dependencies/initialization/RootPluginsExtension.java b/src/main/java/org/gradlex/javamodule/dependencies/initialization/RootPluginsExtension.java index a760ecc6..1ab712be 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/initialization/RootPluginsExtension.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/initialization/RootPluginsExtension.java @@ -17,7 +17,6 @@ package org.gradlex.javamodule.dependencies.initialization; import org.gradle.api.IsolatedAction; -import org.gradle.api.NonNullApi; import org.gradle.api.Project; import org.gradle.api.initialization.Settings; @@ -38,7 +37,6 @@ public void id(String id) { ids.add(id); } - @NonNullApi private static class ApplyPluginAction implements IsolatedAction { private final List ids; diff --git a/src/main/java/org/gradlex/javamodule/dependencies/initialization/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/initialization/package-info.java new file mode 100644 index 00000000..500f227a --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/initialization/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.initialization; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java index c8849728..78f89fb8 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/DependencyAnalysisBridge.java @@ -25,8 +25,8 @@ import org.gradle.api.tasks.TaskProvider; import org.gradlex.javamodule.dependencies.tasks.ModuleDirectivesOrderingCheck; import org.gradlex.javamodule.dependencies.tasks.ModuleDirectivesScopeCheck; +import org.jspecify.annotations.Nullable; -import javax.annotation.Nullable; import java.io.File; public class DependencyAnalysisBridge { diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/package-info.java new file mode 100644 index 00000000..5938c7fd --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/bridges/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.internal.bridges; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/AsciiModuleDependencyReportRenderer.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/AsciiModuleDependencyReportRenderer.java index c1e593ad..9f222851 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/AsciiModuleDependencyReportRenderer.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/AsciiModuleDependencyReportRenderer.java @@ -16,7 +16,6 @@ package org.gradlex.javamodule.dependencies.internal.diagnostics; -import org.gradle.api.NonNullApi; import org.gradle.api.artifacts.ArtifactCollection; import org.gradle.api.artifacts.result.ResolvedComponentResult; import org.gradle.api.provider.Provider; @@ -29,16 +28,16 @@ import org.gradle.api.tasks.diagnostics.internal.graph.nodes.RenderableModuleResult; import org.gradle.internal.graph.GraphRenderer; import org.gradle.internal.logging.text.StyledTextOutput; +import org.jspecify.annotations.Nullable; import java.util.Collections; import java.util.Map; import static java.util.Objects.requireNonNull; -@NonNullApi public class AsciiModuleDependencyReportRenderer extends AsciiDependencyReportRenderer { - private DependencyGraphsRenderer dependencyGraphRenderer; + private @Nullable DependencyGraphsRenderer dependencyGraphRenderer; private final Provider> resolvedJars; public AsciiModuleDependencyReportRenderer(Provider> resolvedJars) { @@ -67,7 +66,7 @@ private void renderNow(RenderableDependency root) { if (root.getChildren().isEmpty()) { this.getTextOutput().withStyle(StyledTextOutput.Style.Info).text("No dependencies"); this.getTextOutput().println(); - } else { + } else if (this.dependencyGraphRenderer != null){ this.dependencyGraphRenderer.render(Collections.singletonList(root)); } } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableJavaModuleResult.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableJavaModuleResult.java index d288ff4b..7c902e08 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableJavaModuleResult.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableJavaModuleResult.java @@ -29,7 +29,6 @@ import java.util.LinkedHashSet; import java.util.Set; -@NonNullApi public class RenderableJavaModuleResult extends RenderableModuleResult { private final Set resolvedJars; diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableModuleDependencyResult.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableModuleDependencyResult.java index 6a3c8612..fd1735ed 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableModuleDependencyResult.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/RenderableModuleDependencyResult.java @@ -16,7 +16,6 @@ package org.gradlex.javamodule.dependencies.internal.diagnostics; -import org.gradle.api.NonNullApi; import org.gradle.api.artifacts.component.ComponentIdentifier; import org.gradle.api.artifacts.component.ComponentSelector; import org.gradle.api.artifacts.component.ModuleComponentIdentifier; @@ -36,7 +35,6 @@ import static org.gradlex.javamodule.dependencies.internal.utils.ModuleJar.isRealModule; import static org.gradlex.javamodule.dependencies.internal.utils.ModuleJar.readModuleNameFromJarFile; -@NonNullApi public class RenderableModuleDependencyResult extends RenderableDependencyResult { private final ResolvedDependencyResult dependency; private final Set resolvedJars; @@ -55,11 +53,9 @@ public Set getChildren() { out.add(new RenderableUnresolvedDependencyResult((UnresolvedDependencyResult) d)); } else { ResolvedDependencyResult resolved = (ResolvedDependencyResult) d; - ResolvedArtifactResult artifact = resolvedJars.stream().filter(a -> - a.getId().getComponentIdentifier().equals(resolved.getSelected().getId())).findFirst().orElse(null); - if (artifact != null) { - out.add(new RenderableModuleDependencyResult(resolved, resolvedJars)); - } + resolvedJars.stream().filter(a -> a.getId().getComponentIdentifier().equals(resolved.getSelected().getId())) + .findFirst() + .ifPresent(artifact -> out.add(new RenderableModuleDependencyResult(resolved, resolvedJars))); } } return out; @@ -81,7 +77,7 @@ public String getName() { return "[CLASSPATH] " + selected.getDisplayName(); } else { String version = ""; - String coordinates = selected.getDisplayName(); + String coordinates = selected.getDisplayName(); String jarName = artifact.getFile().getName(); if (selected instanceof ModuleComponentIdentifier) { String selectedVersion = ((ModuleComponentIdentifier) selected).getVersion(); diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/package-info.java new file mode 100644 index 00000000..665ff0ca --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/diagnostics/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.internal.diagnostics; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/dsl/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/dsl/package-info.java new file mode 100644 index 00000000..61bdbea9 --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/dsl/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.internal.dsl; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java index 0e9352bd..95d619a6 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/DependencyDeclarationsUtil.java @@ -39,16 +39,16 @@ public static Provider> declaredDependencies(Project project, Strin return project.provider(() -> configurations.getNames().contains(configuration) ? configurations.getByName(configuration).getDependencies().stream() .filter(DependencyDeclarationsUtil::isLibraryDependency) - .map(DependencyDeclarationsUtil::toIdentifier).collect(Collectors.toList()) + .map(d -> toIdentifier(project, d)).collect(Collectors.toList()) : Collections.emptyList()); } - private static String toIdentifier(Dependency dependency) { + private static String toIdentifier(Project project, Dependency dependency) { if (dependency instanceof ProjectDependency) { // assume Module Name of local Module ProjectDependency projectDependency = (ProjectDependency) dependency; if (projectDependency.getRequestedCapabilities().isEmpty()) { - return projectDependency.getDependencyProject().getGroup() + "." + dependency.getName(); + return project.getGroup() + "." + dependency.getName(); } else { Capability capability = projectDependency.getRequestedCapabilities().get(0); return capability.getGroup() + "." + capability.getName().replace("-", "."); diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfo.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfo.java index f4c362db..143d1dec 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfo.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfo.java @@ -16,7 +16,8 @@ package org.gradlex.javamodule.dependencies.internal.utils; -import javax.annotation.Nullable; +import org.jspecify.annotations.Nullable; + import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfoCache.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfoCache.java index 66558689..d50e1ee1 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfoCache.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleInfoCache.java @@ -20,6 +20,7 @@ import org.gradle.api.provider.Provider; import org.gradle.api.provider.ProviderFactory; import org.gradle.api.tasks.SourceSet; +import org.jspecify.annotations.Nullable; import org.slf4j.LoggerFactory; import javax.inject.Inject; @@ -64,7 +65,7 @@ public ModuleInfo get(SourceSet sourceSet, ProviderFactory providers) { return ModuleInfo.EMPTY; } - public File getFolder(SourceSet sourceSet, ProviderFactory providers) { + public @Nullable File getFolder(SourceSet sourceSet, ProviderFactory providers) { for (File folder : sourceSet.getJava().getSrcDirs()) { if (maybePutModuleInfo(folder, providers)) { return folder; @@ -97,11 +98,11 @@ public ModuleInfo put(File projectRoot, String moduleInfoPath, String projectPat return ModuleInfo.EMPTY; } - public String getProjectPath(String moduleName) { + public @Nullable String getProjectPath(String moduleName) { return moduleNameToProjectPath.get(moduleName); } - public String getCapability(String moduleName) { + public @Nullable String getCapability(String moduleName) { return moduleNameToCapability.get(moduleName); } @@ -109,7 +110,7 @@ private boolean maybePutModuleInfo(File folder, ProviderFactory providers) { Provider moduleInfoProvider = provideModuleInfo(folder, providers); if (moduleInfoProvider.isPresent()) { if (!moduleInfo.containsKey(folder)) { - moduleInfo.put(folder, moduleInfoProvider.get() ); + moduleInfo.put(folder, moduleInfoProvider.get()); } return true; } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleJar.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleJar.java index d4e6207d..0c3e1d09 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleJar.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleJar.java @@ -16,6 +16,7 @@ package org.gradlex.javamodule.dependencies.internal.utils; +import org.jspecify.annotations.Nullable; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ModuleVisitor; @@ -36,6 +37,7 @@ public class ModuleJar { private static final String MODULE_INFO_CLASS_FILE = "module-info.class"; private static final Pattern MODULE_INFO_CLASS_MRJAR_PATH = Pattern.compile("META-INF/versions/\\d+/module-info.class"); + @Nullable public static String readModuleNameFromJarFile(File jarFileOrClassFolder) throws IOException { if (jarFileOrClassFolder.isDirectory()) { // class folder @@ -86,7 +88,8 @@ public static boolean isRealModule(File jarFileOrClassFolder) throws IOException return false; } - private static String getAutomaticModuleName(Manifest manifest) { + @Nullable + private static String getAutomaticModuleName(@Nullable Manifest manifest) { if (manifest == null) { return null; } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleNamingUtil.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleNamingUtil.java index 4d7269eb..22eaaeae 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleNamingUtil.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/ModuleNamingUtil.java @@ -17,6 +17,7 @@ package org.gradlex.javamodule.dependencies.internal.utils; import org.gradle.api.tasks.SourceSet; +import org.jspecify.annotations.Nullable; import java.util.Arrays; import java.util.stream.Collectors; @@ -30,6 +31,7 @@ public static String sourceSetToModuleName(String projectName, String sourceSetN return toDottedCase(projectName) + "." + toDottedCase(sourceSetName); } + @Nullable public static String sourceSetToCapabilitySuffix(String sourceSetName) { if (sourceSetName.equals(SourceSet.MAIN_SOURCE_SET_NAME)) { return null; diff --git a/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/package-info.java new file mode 100644 index 00000000..161f9019 --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/internal/utils/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.internal.utils; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/package-info.java new file mode 100644 index 00000000..d96f3d5e --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/CatalogGenerate.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/CatalogGenerate.java index 85103dc8..be260505 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/tasks/CatalogGenerate.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/CatalogGenerate.java @@ -18,14 +18,13 @@ import org.gradle.api.DefaultTask; import org.gradle.api.file.RegularFileProperty; -import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.api.provider.SetProperty; import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.TaskAction; +import org.jspecify.annotations.Nullable; -import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -40,7 +39,7 @@ public abstract class CatalogGenerate extends DefaultTask { public static class CatalogEntry implements Comparator { private final String moduleName; private final Provider fullId; - private final String version; + private final @Nullable String version; public CatalogEntry(String moduleName, Provider fullId, @Nullable String version) { this.moduleName = moduleName; diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDependencyReport.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDependencyReport.java index 12ba73d4..e019ddb2 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDependencyReport.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDependencyReport.java @@ -31,7 +31,6 @@ import java.util.Collections; import java.util.Set; -@NonNullApi public abstract class ModuleDependencyReport extends DependencyReportTask { @Internal diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDirectivesScopeCheck.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDirectivesScopeCheck.java index efa695e2..f2301ca9 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDirectivesScopeCheck.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleDirectivesScopeCheck.java @@ -32,6 +32,7 @@ import org.gradle.api.tasks.Internal; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; +import org.jspecify.annotations.Nullable; import java.io.IOException; import java.nio.file.Files; @@ -166,6 +167,7 @@ private boolean coordinatesEquals(String coordinates, String capability, Resolve return false; } + @Nullable private String sourceSetName(String configurationName) { Optional scope = getScope(configurationName); if (!scope.isPresent()) { @@ -175,6 +177,7 @@ private String sourceSetName(String configurationName) { return sourceSet.isEmpty() ? "main" : sourceSet; } + @Nullable private String directive(String configurationName, Map scopesToDirectives) { return getScope(configurationName).map(scopesToDirectives::get).orElse(null); } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleInfoGenerate.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleInfoGenerate.java index 110bc5f9..f58cc0c0 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleInfoGenerate.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModuleInfoGenerate.java @@ -25,6 +25,7 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; +import org.jspecify.annotations.Nullable; import java.io.File; import java.io.IOException; @@ -105,7 +106,7 @@ private Collection dependenciesToModuleDirectives(List dependenc }).collect(Collectors.toList()); } - private String moduleName(String gaOrProjectModuleName) { + private @Nullable String moduleName(String gaOrProjectModuleName) { if (!gaOrProjectModuleName.contains(":")) { return gaOrProjectModuleName; } diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModulePathAnalysis.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModulePathAnalysis.java index 19b434a1..72da9a7b 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModulePathAnalysis.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/ModulePathAnalysis.java @@ -31,6 +31,7 @@ import org.gradle.api.tasks.TaskAction; import org.gradlex.javamodule.dependencies.JavaModuleDependenciesExtension; import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfo; +import org.jspecify.annotations.Nullable; import javax.inject.Inject; import java.io.File; @@ -139,7 +140,7 @@ public void report() throws IOException { p(""); } - private void collect(Configuration configuration, Set usedMappings, Set nonModules, Set missingMappings, Set wrongMappings, String ownModuleNamesPrefix) throws IOException { + private void collect(Configuration configuration, Set usedMappings, Set nonModules, Set missingMappings, Set wrongMappings, @Nullable String ownModuleNamesPrefix) throws IOException { for (ResolvedArtifactResult result : configuration.getIncoming().getArtifacts()) { ComponentIdentifier id = result.getId().getComponentIdentifier(); File resultFile = result.getFile(); diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/SyntheticModuleInfoFoldersGenerate.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/SyntheticModuleInfoFoldersGenerate.java index be3f698b..b7b6583a 100644 --- a/src/main/java/org/gradlex/javamodule/dependencies/tasks/SyntheticModuleInfoFoldersGenerate.java +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/SyntheticModuleInfoFoldersGenerate.java @@ -26,7 +26,6 @@ import org.gradle.api.tasks.TaskAction; import org.gradlex.javamodule.dependencies.internal.utils.ModuleInfoClassCreator; -@NonNullApi @CacheableTask public abstract class SyntheticModuleInfoFoldersGenerate extends DefaultTask { diff --git a/src/main/java/org/gradlex/javamodule/dependencies/tasks/package-info.java b/src/main/java/org/gradlex/javamodule/dependencies/tasks/package-info.java new file mode 100644 index 00000000..e7ce3929 --- /dev/null +++ b/src/main/java/org/gradlex/javamodule/dependencies/tasks/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright the GradleX team. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@NullMarked +package org.gradlex.javamodule.dependencies.tasks; + +import org.jspecify.annotations.NullMarked; \ No newline at end of file diff --git a/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java b/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java index b8006b2e..0be9e495 100644 --- a/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java +++ b/src/test/java/org/gradlex/javamodule/dependencies/test/fixture/GradleBuild.java @@ -72,8 +72,10 @@ public GradleBuild(boolean withHelpTasks, Path dir) { id("org.gradlex.java-module-versions") id("application") } - javaModuleDependencies { - versionsFromPlatformAndConsistentResolution(":app", ":app") + dependencies { + implementation(platform(project(":app")) as ModuleDependency) { + capabilities { requireCapability("${project.group}:app-platform") } + } } application { mainModule.set("org.gradlex.test.app") diff --git a/src/test/java/org/gradlex/javamodule/dependencies/test/initialization/SettingsPluginIncludeTest.java b/src/test/java/org/gradlex/javamodule/dependencies/test/initialization/SettingsPluginIncludeTest.java index 12da4bca..d53fd0fe 100644 --- a/src/test/java/org/gradlex/javamodule/dependencies/test/initialization/SettingsPluginIncludeTest.java +++ b/src/test/java/org/gradlex/javamodule/dependencies/test/initialization/SettingsPluginIncludeTest.java @@ -64,6 +64,7 @@ void can_define_included_subprojects_as_modules() { @Test void can_define_included_subprojects_with_custom_project_directory_as_modules() { + build.projectDir.dir("project/with/custom/path"); build.settingsFile.appendText(""" include(":project:with:custom:path") project(":project:with:custom:path").projectDir = file("lib") diff --git a/src/test/java/org/gradlex/javamodule/dependencies/test/runtime/RequiresRuntimeTest.java b/src/test/java/org/gradlex/javamodule/dependencies/test/runtime/RequiresRuntimeTest.java index 13647748..28178843 100644 --- a/src/test/java/org/gradlex/javamodule/dependencies/test/runtime/RequiresRuntimeTest.java +++ b/src/test/java/org/gradlex/javamodule/dependencies/test/runtime/RequiresRuntimeTest.java @@ -161,17 +161,30 @@ void can_configure_additional_compile_tasks_to_work_with_runtime_only_dependenci "--module-path", classpath.files.joinToString(":"), "--patch-module", - "org.gradlex.test.app=" + srcDir + "org.gradlex.test.app=" + srcDir, + "--add-modules", + "org.junit.jupiter.api", + "--add-reads", + "org.gradlex.test.app=org.junit.jupiter.api" ) } } + tasks.test { useJUnitPlatform() } dependencies.constraints { javaModuleDependencies { implementation(gav("org.slf4j", "2.0.3")) implementation(gav("org.slf4j.simple", "2.0.3")) } - }"""); + } + dependencies { + javaModuleDependencies { + testImplementation(gav("org.junit.jupiter.api", "5.13.4")) + testRuntimeOnly(ga("org.junit.jupiter.engine")) + testRuntimeOnly(ga("org.junit.platform.launcher")) + } + } + """); build.appModuleInfoFile.writeText(""" module org.gradlex.test.app { requires org.slf4j; @@ -180,7 +193,10 @@ void can_configure_additional_compile_tasks_to_work_with_runtime_only_dependenci build.file("app/src/test/java/org/gradlex/test/app/MainTest.java").writeText(""" package org.gradlex.test.app; - public class MainTest {}"""); + public class MainTest { + @org.junit.jupiter.api.Test + void test() {} + }"""); var result = build.build().task(":app:compileTestJava"); diff --git a/src/test/java/org/gradlex/javamodule/dependencies/test/tasks/OrderingCheckTest.java b/src/test/java/org/gradlex/javamodule/dependencies/test/tasks/OrderingCheckTest.java index 8d0348f3..63191a1c 100644 --- a/src/test/java/org/gradlex/javamodule/dependencies/test/tasks/OrderingCheckTest.java +++ b/src/test/java/org/gradlex/javamodule/dependencies/test/tasks/OrderingCheckTest.java @@ -43,7 +43,7 @@ void order_is_expected_to_be_alphabetic_for_each_scope_individually() { } @Test - void if_order_is_not_alphabetic_for_a_scope_an_advice_is_given() throws IOException { + void if_order_is_not_alphabetic_for_a_scope_an_advice_is_given() { build.appModuleInfoFile.writeText(""" module org.example.app { requires a.b.c