diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 4b2a6b6..f831a12 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,11 +13,11 @@ jobs:
steps:
- name: Git checkout
uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK 17
uses: actions/setup-java@v4
with:
cache: gradle
distribution: microsoft
- java-version: 11
+ java-version: 17
- name: Build with Gradle
run: ./gradlew build --scan
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index d0ec777..ddb34af 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -23,12 +23,12 @@ jobs:
steps:
- name: Git checkout
uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK 17
uses: actions/setup-java@v4
with:
cache: gradle
distribution: microsoft
- java-version: 11
+ java-version: 17
- name: Create gradle.properties
run: echo -e "gradle.publish.key=$GRADLE_PUBLISH_KEY\ngradle.publish.secret=$GRADLE_PUBLISH_SECRET" > gradle.properties
- name: Build with Gradle
diff --git a/README.md b/README.md
index 7ae794d..65779c9 100644
--- a/README.md
+++ b/README.md
@@ -32,15 +32,16 @@ The plugin supports the following test engines:
An example application using this plugin is available [here](https://github.com/java9-modularity/gradle-modules-plugin-example).
-Compatability
+Compatibility
===
-| Plugin Version | Gradle Versions | Java Version | Kotlin Version | Notes |
-|------------------|-----------------|--------------|----------------|--------------------------------------------------------------------------------------------|
-| - -> 1.8.12 | 5.+ -> 7.5.+ | 11+ | 1.0.+ -> 1.6.+ | |
-| 1.8.12 -> 1.8.13 | 5.+ -> 7.5.+ | 11+ | 1.0.+ -> 1.9.+ | Adds support for Kotlin 1.7 and above. |
-| 1.8.14 | 5.+ -> 7.6.+ | 11+ | 1.0.+ -> 1.9.+ | Fixes compatibility issue with Gradle 7.6 |
-| 1.8.15 -> + | 5.+ -> 8.6.+ | 11+ | 1.6.+ -> 1.9.+ | Fixes compatibility issues with Gradle 8.0.
Use JUnit v5.8.0 or above if using Gradle 8 |
+| Plugin Version | Gradle Versions | Java Version | Kotlin Version | Notes |
+| ---------------- | --------------- | ------------ | -------------- | ------------------------------------------------------------ |
+| - -> 1.8.12 | 5.+ -> 7.5.+ | 11+ | 1.0.+ -> 1.6.+ | |
+| 1.8.12 -> 1.8.13 | 5.+ -> 7.5.+ | 11+ | 1.0.+ -> 1.9.+ | Adds support for Kotlin 1.7 and above. |
+| 1.8.14 | 5.+ -> 7.6.+ | 11+ | 1.0.+ -> 1.9.+ | Fixes compatibility issue with Gradle 7.6 |
+| 1.8.15 -> 1.8.x | 5.+ -> 8.6.+ | 11+ | 1.6.+ -> 1.9.+ | Fixes compatibility issues with Gradle 8.0.
Use JUnit v5.8.0 or above if using Gradle 8 |
+| 2.0.0 | 8.11.+ -> 9.+ | 17+ | 1.8.+ -> 2.x+ | Adds support for Gradle 9.x.
Minimum Java version raised to 17 |
Setup
===
@@ -76,7 +77,7 @@ The main build file should look as follows:
```groovy
plugins {
- id 'org.javamodularity.moduleplugin' version '1.8.15' apply false
+ id 'org.javamodularity.moduleplugin' version '2.0.0' apply false
}
subprojects {
@@ -85,8 +86,8 @@ subprojects {
version "1.0-SNAPSHOT"
- sourceCompatibility = 11
- targetCompatibility = 11
+ sourceCompatibility = 17
+ targetCompatibility = 17
repositories {
mavenCentral()
@@ -101,19 +102,21 @@ subprojects {
}
dependencies {
- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
- testImplementation 'org.junit.jupiter:junit-jupiter-params:5.3.1'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
+ testImplementation 'org.junit.jupiter:junit-jupiter-params:5.10.2'
+ testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.2'
+ testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.10.2"
}
}
```
+
Kotlin DSL
```kotlin
plugins {
- id("org.javamodularity.moduleplugin") version "1.8.15" apply false
+ id("org.javamodularity.moduleplugin") version "2.0.0" apply false
}
subprojects {
@@ -124,7 +127,7 @@ subprojects {
java {
toolchain {
- languageVersion.set(JavaLanguageVersion.of(11))
+ languageVersion.set(JavaLanguageVersion.of(17))
}
}
@@ -141,9 +144,10 @@ subprojects {
}
dependencies {
- testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.1")
- testImplementation("org.junit.jupiter:junit-jupiter-params:5.3.1")
- testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.3.1")
+ testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.1")
+ testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.2")
+ testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.2")
+ testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.10.2")
}
}
```
@@ -952,7 +956,7 @@ Please file issues if you run into any problems or have additional requirements!
Requirements
===
-This plugin requires JDK 11 or newer to be used when running Gradle.
+This latest version of this plugin requires JDK 17 or newer to be used when running Gradle. Older versions support JDK 11.
The minimum Gradle version supported by this plugin is 5.1.
However, we strongly recommend to use at least Gradle 6.0, because there are a few special cases that cannot be handled correctly when using older versions.
diff --git a/build.gradle b/build.gradle
index 7626bc0..b590fbe 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,20 +3,24 @@ plugins {
id 'java-gradle-plugin'
id 'maven-publish' // used for publishing to local maven repository
id 'com.gradle.plugin-publish' version '1.2.1'
- id 'com.github.johnrengelman.shadow' version '7.1.2'
+ id 'com.gradleup.shadow' version '9.2.2'
id 'com.github.ben-manes.versions' version '0.51.0'
}
-buildScan {
- termsOfServiceUrl = 'https://gradle.com/terms-of-service'
- termsOfServiceAgree = 'yes'
+develocity {
+ buildScan {
+ termsOfUseUrl = 'https://gradle.com/help/legal-terms-of-use'
+ termsOfUseAgree = 'yes'
+ }
}
group 'org.javamodularity'
-version '1.8.16-SNAPSHOT'
+version '2.0.0'
-sourceCompatibility = 11
-targetCompatibility = 11
+java {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+}
repositories {
mavenCentral()
@@ -39,8 +43,8 @@ dependencies {
testImplementation 'com.google.guava:guava-io:r03'
testImplementation "org.junit.jupiter:junit-jupiter-api:$jUnitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-params:$jUnitVersion"
+ testImplementation "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
testImplementation 'org.junit-pioneer:junit-pioneer:2.3.0'
- testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // required when testing in Eclipse
}
@@ -96,21 +100,18 @@ dependencies {
gradlePlugin {
plugins {
+ website = 'https://github.com/java9-modularity/gradle-modules-plugin'
+ vcsUrl = 'https://github.com/java9-modularity/gradle-modules-plugin'
modulesPlugin {
id = 'org.javamodularity.moduleplugin'
displayName = 'Java Modularity Gradle Plugin'
description = 'Plugin that makes it easy to work with the Java Platform Module System'
implementationClass = 'org.javamodularity.moduleplugin.ModuleSystemPlugin'
+ tags = ['java', 'modules', 'jpms', 'modularity']
}
}
}
-pluginBundle {
- website = 'https://github.com/java9-modularity/gradle-modules-plugin'
- vcsUrl = 'https://github.com/java9-modularity/gradle-modules-plugin'
- tags = ['java', 'modules', 'jpms', 'modularity']
-}
-
publishing { // used for publishing to local maven repository
publications {
pluginMaven(MavenPublication) {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a0f7639..bbb57cf 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle b/settings.gradle
index 026639d..7c6ca76 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,5 +1,5 @@
plugins {
- id "com.gradle.enterprise" version "3.17.4"
+ id "com.gradle.develocity" version "4.2.1"
}
rootProject.name = 'moduleplugin'
diff --git a/src/main/java/org/javamodularity/moduleplugin/TestEngine.java b/src/main/java/org/javamodularity/moduleplugin/TestEngine.java
index a895102..f2e8a6a 100644
--- a/src/main/java/org/javamodularity/moduleplugin/TestEngine.java
+++ b/src/main/java/org/javamodularity/moduleplugin/TestEngine.java
@@ -104,7 +104,17 @@ public static Collection selectMultiple(Project project, Set f
}
+ private static Stream getDirectDependencies(Configuration origCfg) {
+ LOGGER.debug("Configuration {} cannot be resolved, using direct dependencies only", origCfg.getName());
+ return origCfg.getDependencies().stream()
+ .map(dep -> new GroupArtifact(dep.getGroup(), dep.getName()));
+ }
+
private static Stream getModuleIdentifiers(Configuration origCfg, Set files) {
+ if (!origCfg.isCanBeResolved()) {
+ return getDirectDependencies(origCfg);
+ }
+
Configuration cfg = origCfg.copyRecursive();
cfg.setCanBeResolved(true);
try {
@@ -116,9 +126,7 @@ private static Stream getModuleIdentifiers(Configuration origCfg,
.map(dep -> GroupArtifact.fromModuleIdentifier(dep.getModule().getId().getModule()));
} catch (ResolveException e) {
LOGGER.debug("Cannot resolve transitive dependencies of configuration " + cfg.getName(), e);
- LOGGER.info("Using direct dependencies of configuration {}.", origCfg.getName());
- return origCfg.getDependencies().stream()
- .map(dep -> new GroupArtifact(dep.getGroup(), dep.getName()));
+ return getDirectDependencies(origCfg);
}
}
diff --git a/src/main/java/org/javamodularity/moduleplugin/internal/CompileModuleInfoHelper.java b/src/main/java/org/javamodularity/moduleplugin/internal/CompileModuleInfoHelper.java
index 1eb396f..d1fc94b 100644
--- a/src/main/java/org/javamodularity/moduleplugin/internal/CompileModuleInfoHelper.java
+++ b/src/main/java/org/javamodularity/moduleplugin/internal/CompileModuleInfoHelper.java
@@ -2,13 +2,17 @@
import org.gradle.api.Project;
import org.gradle.api.Task;
+import org.gradle.api.artifacts.Dependency;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.logging.Logger;
import org.gradle.api.logging.Logging;
+import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.compile.JavaCompile;
+import org.gradle.util.GradleVersion;
import org.javamodularity.moduleplugin.extensions.CompileModuleOptions;
import java.util.Objects;
+import java.util.function.Function;
import java.util.stream.Stream;
public final class CompileModuleInfoHelper {
@@ -32,10 +36,14 @@ public static void dependOnOtherCompileModuleInfoJavaTasks(JavaCompile javaCompi
* @return a {@link Stream} of {@code compileModuleInfoJava} tasks from dependent projects
*/
private static Stream dependentCompileModuleInfoJavaTaskStream(Project project) {
+ final Function mapToTaskContainer = dependency ->
+ project.project(((ProjectDependency) dependency)
+ .getPath() /* ProjectDependency.getPath() introduced in Gradle 8.11 */).getTasks();
+
return project.getConfigurations().stream()
.flatMap(configuration -> configuration.getDependencies().stream())
.filter(dependency -> dependency instanceof ProjectDependency)
- .map(dependency -> ((ProjectDependency) dependency).getDependencyProject().getTasks())
+ .map(mapToTaskContainer)
.map(tasks -> tasks.findByName(CompileModuleOptions.COMPILE_MODULE_INFO_TASK_NAME))
.filter(Objects::nonNull)
.filter(task -> task.getProject() != project);
diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/AbstractExecutionMutator.java b/src/main/java/org/javamodularity/moduleplugin/tasks/AbstractExecutionMutator.java
index 7a0cc19..831304a 100644
--- a/src/main/java/org/javamodularity/moduleplugin/tasks/AbstractExecutionMutator.java
+++ b/src/main/java/org/javamodularity/moduleplugin/tasks/AbstractExecutionMutator.java
@@ -24,7 +24,7 @@ abstract class AbstractExecutionMutator {
protected final String getMainClassName() {
if(GradleVersion.current().compareTo(GradleVersion.version("6.4")) < 0) {
String mainClassName = Objects.requireNonNull(
- execTask.getMain(),
+ execTask.getMainClass().getOrNull(),
"Main class name not found. Try setting 'application.mainClassName' in your Gradle build file."
);
if (!mainClassName.contains("/")) {
diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java b/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java
index b4d1002..a10db34 100644
--- a/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java
+++ b/src/main/java/org/javamodularity/moduleplugin/tasks/CompileModuleInfoTask.java
@@ -71,7 +71,7 @@ public void execute(Task task) {
// https://docs.gradle.org/6.1/javadoc/org/gradle/api/file/SourceDirectorySet.html#getClassesDirectory--
classesDir = helper().mainSourceSet().getJava().getClassesDirectory().get().getAsFile();
} else {
- classesDir = helper().mainSourceSet().getJava().getOutputDir();
+ classesDir = helper().mainSourceSet().getJava().getDestinationDirectory().get().getAsFile();
}
File mainModuleInfoFile = new File(classesDir, "module-info.class");
diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/ModularCreateStartScripts.java b/src/main/java/org/javamodularity/moduleplugin/tasks/ModularCreateStartScripts.java
index d26c448..f4b71eb 100644
--- a/src/main/java/org/javamodularity/moduleplugin/tasks/ModularCreateStartScripts.java
+++ b/src/main/java/org/javamodularity/moduleplugin/tasks/ModularCreateStartScripts.java
@@ -3,6 +3,8 @@
import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.plugins.ApplicationPluginConvention;
+import org.gradle.api.plugins.JavaApplication;
+import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.application.CreateStartScripts;
@@ -22,12 +24,12 @@ public ModularCreateStartScripts() {
setClasspath(getProject().files());
}
+ @Input
@Nullable
- @Override
public String getMainClassName() {
String main = changedMain;
if(main == null) {
- main = super.getMainClassName();
+ main = super.getMainClass().getOrNull();
}
if(main == null) {
main = UNDEFINED_MAIN_CLASS_NAME;
@@ -35,9 +37,9 @@ public String getMainClassName() {
return main;
}
- @Override
public void setMainClassName(@Nullable String mainClassName) {
changedMain = mainClassName;
+ getMainClass().set(mainClassName);
}
public ModularJavaExec getRunTask() {
@@ -59,10 +61,10 @@ private static void configureAfterEvaluate(Project project) {
}
private static void configure(ModularCreateStartScripts startScriptsTask, Project project) {
- var appConvention = project.getConvention().findPlugin(ApplicationPluginConvention.class);
- if (appConvention != null) {
- var distDir = project.file(project.getBuildDir() + "/install/" + appConvention.getApplicationName());
- startScriptsTask.setOutputDir(new File(distDir, appConvention.getExecutableDir()));
+ final var appExtension = project.getExtensions().findByType(JavaApplication.class);
+ if (appExtension != null) {
+ var distDir = project.file(project.getLayout().getBuildDirectory().get().getAsFile() + "/install/" + appExtension.getApplicationName());
+ startScriptsTask.setOutputDir(new File(distDir, appExtension.getExecutableDir()));
}
ModularJavaExec runTask = startScriptsTask.getRunTask();
diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/ModularJavaExec.java b/src/main/java/org/javamodularity/moduleplugin/tasks/ModularJavaExec.java
index e59b6a5..615b62d 100644
--- a/src/main/java/org/javamodularity/moduleplugin/tasks/ModularJavaExec.java
+++ b/src/main/java/org/javamodularity/moduleplugin/tasks/ModularJavaExec.java
@@ -65,22 +65,12 @@ public void setJvmArgs(Iterable> arguments) {
}
@Input
- @Override
public String getMain() {
- if(GradleVersion.current().compareTo(GradleVersion.version("6.4")) >= 0) {
- return stripModule(getMainClass().getOrNull());
- } else {
- return super.getMain();
- }
+ return stripModule(getMainClass().getOrNull());
}
- @Override
public JavaExec setMain(String mainClassName) {
- if(GradleVersion.current().compareTo(GradleVersion.version("6.4")) >= 0) {
- getMainClass().set(stripModule(mainClassName));
- } else {
- super.setMain(mainClassName);
- }
+ getMainClass().set(stripModule(mainClassName));
return this;
}
diff --git a/src/main/java/org/javamodularity/moduleplugin/tasks/StartScriptsMutator.java b/src/main/java/org/javamodularity/moduleplugin/tasks/StartScriptsMutator.java
index aa56f45..4b1ee96 100644
--- a/src/main/java/org/javamodularity/moduleplugin/tasks/StartScriptsMutator.java
+++ b/src/main/java/org/javamodularity/moduleplugin/tasks/StartScriptsMutator.java
@@ -68,10 +68,9 @@ private void configureStartScriptsDoFirst(CreateStartScripts startScriptsTask) {
startScriptsTask.setDefaultJvmOpts(jvmArgs);
startScriptsTask.setClasspath(project.files());
- if(GradleVersion.current().compareTo(GradleVersion.version("6.4")) < 0) {
- if (ModularCreateStartScripts.UNDEFINED_MAIN_CLASS_NAME.equals(startScriptsTask.getMainClassName())) {
- startScriptsTask.setMainClassName(execTask.getMain());
- }
+ final var mainClass = startScriptsTask.getMainClass();
+ if (ModularCreateStartScripts.UNDEFINED_MAIN_CLASS_NAME.equals(mainClass.getOrNull())) {
+ mainClass.set(execTask.getMainClass());
}
}
diff --git a/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java b/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java
index 42ccefe..b10be5c 100644
--- a/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java
+++ b/src/test/java/org/javamodularity/moduleplugin/ModulePluginSmokeTest.java
@@ -13,7 +13,9 @@
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
+import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
@@ -33,10 +35,8 @@ class ModulePluginSmokeTest {
@SuppressWarnings("unused")
private enum GradleVersion {
- v5_1, v5_6,
- v6_3, v6_4_1, v6_5_1, v6_8_3,
- v7_0, v7_6_4,
- v8_0, v8_6
+ v8_11, v8_14_3,
+ v9_0, v9_1_0
;
@Override
@@ -70,7 +70,7 @@ void smokeTest(
.withProjectDir(new File(projectName + "/"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", "run", "--stacktrace")
+ .withArguments("clean", "build", "run", "--stacktrace")
.forwardOutput()
.build();
@@ -101,7 +101,7 @@ void smokeTestRun(
.withProjectDir(new File(projectName + "/"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-q", "-c", "smoke_test_settings.gradle", "clean", ":greeter.runner:run", "--args", "aaa bbb")
+ .withArguments("-q", "clean", ":greeter.runner:run", "--args", "aaa bbb")
.forwardStdOutput(writer)
.forwardStdError(writer)
.build();
@@ -135,7 +135,7 @@ void smokeTestJunit5(
.withProjectDir(new File("test-project/"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-c", "smoke_test_settings.gradle", junitVersionProperty, junitPlatformVersionProperty, "clean", "build", "run", "--stacktrace")
+ .withArguments(junitVersionProperty, junitPlatformVersionProperty, "clean", "build", "run", "--stacktrace")
.forwardOutput()
.build();
@@ -153,7 +153,7 @@ void smokeTestMixed(@CartesianTest.Enum GradleVersion gradleVersion) {
.withProjectDir(new File("test-project-mixed"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", "--stacktrace")
+ .withArguments("clean", "build", "--stacktrace")
.forwardOutput()
.build();
@@ -212,7 +212,7 @@ void smokeTestDist(
.withProjectDir(new File(projectName + "/"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-c", "smoke_test_settings.gradle", "clean", "build", ":greeter.runner:installDist", "--stacktrace")
+ .withArguments("clean", "build", ":greeter.runner:installDist", "--stacktrace")
.forwardOutput()
.build();
@@ -259,7 +259,7 @@ void smokeTestRunDemo(
.withProjectDir(new File(projectName + "/"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-c", "smoke_test_settings.gradle", "clean", "build",
+ .withArguments("clean", "build",
":greeter.javaexec:runDemo1", ":greeter.javaexec:runDemo2", "--info", "--stacktrace")
.forwardOutput()
.build();
@@ -284,7 +284,7 @@ void smokeTestRunStartScripts(
.withProjectDir(new File(projectName + "/"))
.withPluginClasspath(pluginClasspath)
.withGradleVersion(gradleVersion.toString())
- .withArguments("-c", "smoke_test_settings.gradle", "clean", ":greeter.startscripts:installDist", "--info", "--stacktrace")
+ .withArguments("clean", ":greeter.startscripts:installDist", "--info", "--stacktrace")
.forwardOutput()
.build();
@@ -300,7 +300,7 @@ void smokeTestRunStartScripts(
@Test
void shouldNotCheckInWithCommentedOutVersions() {
- assertEquals(10, GradleVersion.values().length);
+ assertEquals(4, GradleVersion.values().length);
}
private static void assertTasksSuccessful(BuildResult result, String subprojectName, String... taskNames) {
@@ -326,7 +326,7 @@ private static boolean checkKotlinCombination(String projectName, GradleVersion
}
private boolean checkJUnitCombination(final String junitVersion, final GradleVersion gradleVersion) {
- final boolean gradleEighthPlus = gradleVersion.ordinal() >= GradleVersion.v8_0.ordinal();
+ final boolean gradleEighthPlus = gradleVersion.ordinal() >= GradleVersion.v8_11.ordinal();
final Matcher m = SEMANTIC_VERSION.matcher(junitVersion);
assumeTrue(m.matches(), "JUnit version not semantic: " + junitVersion);
final boolean junitOlderThan5_8_0 = Integer.parseInt(m.group("major")) < 5 ||
@@ -341,25 +341,26 @@ private boolean checkJUnitCombination(final String junitVersion, final GradleVer
private static int javaMajorVersion() {
final String version = System.getProperty("java.version");
- return Integer.parseInt(version.substring(0, version.indexOf(".")));
+
+ // Java 9+ (9.0.1, 11.0.2, 17.0.2 format)
+ int dotIndex = version.indexOf(".");
+ if (dotIndex == -1) {
+ // Handle cases like "17" without dot
+ return Integer.parseInt(version);
+ }
+
+ return Integer.parseInt(version.substring(0, dotIndex));
}
private boolean jdkSupported(final GradleVersion gradleVersion) {
- switch (gradleVersion) {
- // CI build runs with early JDK that supports these Gradle version
- // But don't fail locally if running local JDK.
- // Running JDK 14+ with Gradle 5 runs into:
- // https://github.com/gradle/gradle/issues/10248
- case v5_1:
- case v5_6:
- final int major = javaMajorVersion();
- if (major > 13) {
- LOGGER.lifecycle("Unsupported JDK version '{}' for Gradle 5: Test skipped", major);
- return false;
- }
- return true;
- default:
- return true;
+ final int javaMajor = javaMajorVersion();
+
+ // All supported Gradle versions (8.11+) require Java 17+
+ if (javaMajor < 17) {
+ LOGGER.lifecycle("Gradle {} requires Java 17+, but running Java {}: Test skipped", gradleVersion, javaMajor);
+ return false;
}
+
+ return true;
}
}
diff --git a/test-project-groovy/build.gradle b/test-project-groovy/build.gradle
index d7c3173..2a60b5b 100644
--- a/test-project-groovy/build.gradle
+++ b/test-project-groovy/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id 'org.javamodularity.moduleplugin' version '1.8.15' apply false
+ id 'org.javamodularity.moduleplugin' version '2.0.0' apply false
}
subprojects {
@@ -29,7 +29,8 @@ subprojects {
implementation 'org.codehaus.groovy:groovy:3.0.21'
testImplementation "org.junit.jupiter:junit-jupiter-api:$jUnitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-params:$jUnitVersion"
- testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
+ testImplementation "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
+ testRuntimeOnly "org.junit.platform:junit-platform-launcher:$jUnitPlatformVersion"
testImplementation("org.spockframework:spock-core:2.4-M1-groovy-3.0") {
exclude module: 'groovy-nio'
exclude module: 'groovy-test'
diff --git a/test-project-groovy/settings.gradle b/test-project-groovy/settings.gradle
index 440e773..3aa331e 100644
--- a/test-project-groovy/settings.gradle
+++ b/test-project-groovy/settings.gradle
@@ -1,3 +1,13 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal().with {
+ content {
+ excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
+ }
+ }
+ }
+}
+
import org.gradle.util.GradleVersion
rootProject.name = 'test-project-groovy'
diff --git a/test-project-groovy/smoke_test_settings.gradle b/test-project-groovy/smoke_test_settings.gradle
deleted file mode 100644
index 3efe266..0000000
--- a/test-project-groovy/smoke_test_settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-pluginManagement {
- repositories {
- gradlePluginPortal().with {
- content {
- excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
- }
- }
- }
-}
-
-apply from: 'settings.gradle'
diff --git a/test-project-kotlin-pre-1-7/build.gradle.kts b/test-project-kotlin-pre-1-7/build.gradle.kts
index 993d0fe..b78ee60 100644
--- a/test-project-kotlin-pre-1-7/build.gradle.kts
+++ b/test-project-kotlin-pre-1-7/build.gradle.kts
@@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.3.72" apply false
- id("org.javamodularity.moduleplugin") version "1.8.15" apply false
+ id("org.javamodularity.moduleplugin") version "2.0.0" apply false
}
if (gradle.gradleVersion >= "8.0") {
diff --git a/test-project-kotlin-pre-1-7/settings.gradle b/test-project-kotlin-pre-1-7/settings.gradle
index d6987f7..911eb20 100644
--- a/test-project-kotlin-pre-1-7/settings.gradle
+++ b/test-project-kotlin-pre-1-7/settings.gradle
@@ -1,3 +1,13 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal().with {
+ content {
+ excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
+ }
+ }
+ }
+}
+
import org.gradle.util.GradleVersion
rootProject.name = 'test-project-kotlin-pre-1-7'
diff --git a/test-project-kotlin-pre-1-7/smoke_test_settings.gradle b/test-project-kotlin-pre-1-7/smoke_test_settings.gradle
deleted file mode 100644
index 3efe266..0000000
--- a/test-project-kotlin-pre-1-7/smoke_test_settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-pluginManagement {
- repositories {
- gradlePluginPortal().with {
- content {
- excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
- }
- }
- }
-}
-
-apply from: 'settings.gradle'
diff --git a/test-project-kotlin/build.gradle.kts b/test-project-kotlin/build.gradle.kts
index 743022d..31e2bd5 100644
--- a/test-project-kotlin/build.gradle.kts
+++ b/test-project-kotlin/build.gradle.kts
@@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "2.0.0" apply false
- id("org.javamodularity.moduleplugin") version "1.8.15" apply false
+ id("org.javamodularity.moduleplugin") version "2.0.0" apply false
}
subprojects {
diff --git a/test-project-kotlin/settings.gradle b/test-project-kotlin/settings.gradle
index beb5ff1..a1e9334 100644
--- a/test-project-kotlin/settings.gradle
+++ b/test-project-kotlin/settings.gradle
@@ -1,3 +1,13 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal().with {
+ content {
+ excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
+ }
+ }
+ }
+}
+
import org.gradle.util.GradleVersion
rootProject.name = 'test-project-kotlin'
diff --git a/test-project-kotlin/smoke_test_settings.gradle b/test-project-kotlin/smoke_test_settings.gradle
deleted file mode 100644
index 3efe266..0000000
--- a/test-project-kotlin/smoke_test_settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-pluginManagement {
- repositories {
- gradlePluginPortal().with {
- content {
- excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
- }
- }
- }
-}
-
-apply from: 'settings.gradle'
diff --git a/test-project-mixed/build.gradle b/test-project-mixed/build.gradle
index cb76c21..f7232f2 100644
--- a/test-project-mixed/build.gradle
+++ b/test-project-mixed/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id 'org.javamodularity.moduleplugin' version '1.8.15' apply false
+ id 'org.javamodularity.moduleplugin' version '2.0.0' apply false
}
subprojects {
@@ -25,7 +25,7 @@ subprojects {
dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-api:$jUnitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-params:$jUnitVersion"
- testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
+ testImplementation "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
testRuntimeOnly "org.junit.platform:junit-platform-launcher:$jUnitPlatformVersion"
}
diff --git a/test-project-mixed/settings.gradle b/test-project-mixed/settings.gradle
index 81a152a..18e8cf8 100644
--- a/test-project-mixed/settings.gradle
+++ b/test-project-mixed/settings.gradle
@@ -1,3 +1,13 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal().with {
+ content {
+ excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
+ }
+ }
+ }
+}
+
rootProject.name = 'test-project-mixed'
include 'greeter.api-jdk8'
diff --git a/test-project-mixed/smoke_test_settings.gradle b/test-project-mixed/smoke_test_settings.gradle
deleted file mode 100644
index 3efe266..0000000
--- a/test-project-mixed/smoke_test_settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-pluginManagement {
- repositories {
- gradlePluginPortal().with {
- content {
- excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
- }
- }
- }
-}
-
-apply from: 'settings.gradle'
diff --git a/test-project/build.gradle b/test-project/build.gradle
index e193ea0..cd7de28 100644
--- a/test-project/build.gradle
+++ b/test-project/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id 'org.javamodularity.moduleplugin' version '1.8.15' apply false
+ id 'org.javamodularity.moduleplugin' version '2.0.0' apply false
}
subprojects {
@@ -27,7 +27,7 @@ subprojects {
dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-api:$jUnitVersion"
testImplementation "org.junit.jupiter:junit-jupiter-params:$jUnitVersion"
- testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
+ testImplementation "org.junit.jupiter:junit-jupiter-engine:$jUnitVersion"
testRuntimeOnly "org.junit.platform:junit-platform-launcher:$jUnitPlatformVersion"
}
diff --git a/test-project/settings.gradle b/test-project/settings.gradle
index e22c7c0..011d317 100644
--- a/test-project/settings.gradle
+++ b/test-project/settings.gradle
@@ -1,3 +1,13 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal().with {
+ content {
+ excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
+ }
+ }
+ }
+}
+
import org.gradle.util.GradleVersion
rootProject.name = 'test-project'
diff --git a/test-project/smoke_test_settings.gradle b/test-project/smoke_test_settings.gradle
deleted file mode 100644
index 3efe266..0000000
--- a/test-project/smoke_test_settings.gradle
+++ /dev/null
@@ -1,11 +0,0 @@
-pluginManagement {
- repositories {
- gradlePluginPortal().with {
- content {
- excludeGroup 'org.javamodularity.moduleplugin' // added to the classpath by the smoke test
- }
- }
- }
-}
-
-apply from: 'settings.gradle'