Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ tasks.test {

testing.suites.named<JvmTestSuite>("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
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion gradlew
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.my.lib.test;

class MyLibTest {

@org.junit.jupiter.api.Test
void test() {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.my.lib.test;

class MyLibTest {

@org.junit.jupiter.api.Test
void test() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -10,8 +11,15 @@ java.toolchain.languageVersion.set(JavaLanguageVersion.of(11))
testing.suites.register<JvmTestSuite>("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<Test>().configureEach {
Expand Down
1 change: 1 addition & 0 deletions samples/module-info-dsl/gradle/plugins/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -10,8 +11,11 @@ java.toolchain.languageVersion.set(JavaLanguageVersion.of(11))
testing.suites.register<JvmTestSuite>("testFunctional")
tasks.check { dependsOn(tasks.named("testFunctional")) }

javaModuleDependencies {
versionsFromPlatformAndConsistentResolution(":versions", ":app")
jvmDependencyConflicts {
consistentResolution {
platform(":versions")
providesVersions(":app")
}
}

tasks.withType<Test>().configureEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<ModuleInfoCache> getModuleInfoCache();

Expand Down Expand Up @@ -132,7 +131,7 @@ public abstract class JavaModuleDependenciesExtension {
*/
public abstract Property<Boolean> 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"));
Expand Down Expand Up @@ -198,7 +197,7 @@ private String toProjectName(String moduleNameSuffix) {
List<String> allProjectNames = getProject().getRootProject().getSubprojects().stream().map(Project::getName).collect(Collectors.toList());

Optional<String> perfectMatch = allProjectNames.stream().filter(p -> p.replace("-", ".").equals(moduleNameSuffix)).findFirst();
Optional<String> existingProjectName = allProjectNames.stream().filter(p -> moduleNameSuffix != null && moduleNameSuffix.startsWith(p.replace("-", ".") + "."))
Optional<String> existingProjectName = allProjectNames.stream().filter(p -> moduleNameSuffix.startsWith(p.replace("-", ".") + "."))
.max(Comparator.comparingInt(String::length));

if (perfectMatch.isPresent()) {
Expand Down Expand Up @@ -278,7 +277,7 @@ private Provider<Dependency> createWithGuessing(String moduleName, SourceSet sou
});
}

private ModuleDependency createExternalDependency(String moduleName) {
private @Nullable ModuleDependency createExternalDependency(String moduleName) {
Provider<String> coordinates = getModuleNameToGA().getting(moduleName).orElse(mapByPrefix(getProviders().provider(() -> moduleName)));
if (coordinates.isPresent()) {
Map<String, Object> component;
Expand Down Expand Up @@ -448,57 +447,6 @@ public Configuration versionsFromConsistentResolution(Collection<String> 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<String> 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
Expand Down Expand Up @@ -572,7 +520,4 @@ private <T> Provider<T> errorIfNotFound(Provider<String> moduleName) {

@Inject
protected abstract ConfigurationContainer getConfigurations();

@Inject
protected abstract SourceSetContainer getSourceSets();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -64,7 +63,6 @@
import static org.gradlex.javamodule.dependencies.internal.utils.ModuleNamingUtil.sourceSetToModuleName;

@SuppressWarnings("unused")
@NonNullApi
public abstract class JavaModuleDependenciesPlugin implements Plugin<ExtensionAware> {

private static final String EXTRA_JAVA_MODULE_INFO_PLUGIN_ID = "org.gradlex.extra-java-module-info";
Expand All @@ -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());

Expand Down Expand Up @@ -151,6 +150,7 @@ private void setupModuleDependenciesTask(Project project) {
TaskProvider<ModuleDependencyReport> moduleDependencies = project.getTasks().register("moduleDependencies", ModuleDependencyReport.class, t -> t.setGroup(HELP_GROUP));
sourceSets.all(sourceSet -> moduleDependencies.configure(t -> {
HashSet<Configuration> joined = new HashSet<>();
//noinspection ConstantValue
if (t.getConfigurations() != null) {
joined.addAll(t.getConfigurations());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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<Project> {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -27,7 +29,7 @@ final public class SharedMappings {
static Map<String, String> 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.");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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<Settings> {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -165,19 +165,18 @@ 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<String> plugins;
private final String mainModuleName;
private final @Nullable String mainModuleName;

public ModuleProject(String path, String group, List<String> plugins, String mainModuleName) {
public ModuleProject(String path, @Nullable String group, List<String> plugins, @Nullable String mainModuleName) {
this.path = path;
this.group = group;
this.plugins = plugins;
this.mainModuleName = mainModuleName;
}
}

@NonNullApi
private static class ApplyPluginsAction implements IsolatedAction<Project> {

private final List<ModuleProject> moduleProjects;
Expand Down Expand Up @@ -205,7 +204,6 @@ public void execute(Project project) {
}
}

@NonNullApi
private static class ApplyJavaModuleVersionsPluginAction implements IsolatedAction<Project> {

private final String projectPath;
Expand Down
Loading