Skip to content

Commit 962bd89

Browse files
committed
Migrate build to shared convention plugins setup
1 parent 65431db commit 962bd89

File tree

15 files changed

+119
-259
lines changed

15 files changed

+119
-259
lines changed

build.gradle.kts

Lines changed: 93 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,32 @@
1-
plugins {
2-
id("gradlexbuild.module-mappings")
3-
id("org.gradlex.internal.plugin-publish-conventions") version "0.6"
4-
}
1+
import java.util.Properties
2+
import org.gradle.api.internal.project.ProjectInternal
3+
import org.gradle.util.internal.VersionNumber
54

6-
group = "org.gradlex"
75
version = "1.11"
86

9-
java {
10-
toolchain.languageVersion = JavaLanguageVersion.of(17)
11-
}
12-
13-
tasks.compileJava {
14-
options.release = 8
15-
}
16-
17-
tasks.withType<Javadoc>().configureEach {
18-
options {
19-
this as StandardJavadocDocletOptions
20-
encoding = "UTF-8"
21-
addStringOption("Xdoclint:all,-missing", "-quiet")
22-
addStringOption("Xwerror", "-quiet")
23-
}
24-
}
25-
267
configurations.compileClasspath {
278
// Allow Java 11 dependencies on compile classpath
289
attributes.attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 11)
2910
}
3011

3112
dependencies {
3213
implementation("org.ow2.asm:asm:9.9")
33-
3414
compileOnly("org.gradlex:extra-java-module-info:1.13.1")
3515
compileOnly("com.autonomousapps:dependency-analysis-gradle-plugin:3.4.0")
36-
37-
testImplementation("org.assertj:assertj-core:3.27.6")
38-
testImplementation("org.gradle.exemplar:samples-check:1.0.3")
39-
testRuntimeOnly("org.junit.vintage:junit-vintage-engine")
4016
}
4117

42-
pluginPublishConventions {
43-
id("${project.group}.${project.name}")
44-
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin")
45-
displayName("Java Module Dependencies Gradle Plugin")
46-
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
47-
tags("gradlex", "java", "modularity", "jigsaw", "jpms", "dependencies", "versions")
18+
publishingConventions {
19+
pluginPortal("${project.group}.${project.name}") {
20+
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin")
21+
displayName("Java Module Dependencies Gradle Plugin")
22+
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
23+
tags("gradlex", "java", "modularity", "jigsaw", "jpms", "dependencies", "versions")
24+
}
25+
pluginPortal("${project.group}.java-module-versions") {
26+
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleVersionsPlugin")
27+
displayName("Java Module Versions Gradle Plugin")
28+
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
29+
}
4830
gitHub("https://github.com/gradlex-org/java-module-dependencies")
4931
developer {
5032
id.set("jjohannes")
@@ -53,43 +35,88 @@ pluginPublishConventions {
5335
}
5436
}
5537

56-
gradlePlugin.plugins.register("java-module-versions") {
57-
id = "${project.group}.${name}"
58-
implementationClass = "org.gradlex.javamodule.dependencies.JavaModuleVersionsPlugin"
59-
displayName = "Java Module Versions Gradle Plugin"
60-
description = "A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files."
61-
tags = listOf("gradlex", "java", "modularity", "jigsaw", "jpms", "dependencies", "versions")
62-
}
38+
testingConventions { testGradleVersions("7.4", "7.6.5", "8.0.2", "8.14.3") }
6339

64-
tasks.test {
65-
useJUnitPlatform()
66-
maxParallelForks = 4
67-
inputs.dir(layout.projectDirectory.dir("samples"))
40+
val detachedResolver: ProjectInternal.DetachedResolver = (project as ProjectInternal).newDetachedResolver()
41+
42+
detachedResolver.repositories.ivy {
43+
name = "Modules Properties Repository"
44+
url = project.uri("https://raw.githubusercontent.com/sormuras/modules/main/com.github.sormuras.modules")
45+
metadataSources.artifact()
46+
patternLayout {
47+
artifact("[organisation]/[module].properties")
48+
ivy("[module]/[revision]/ivy.xml")
49+
setM2compatible(true)
50+
}
6851
}
6952

70-
testing.suites.named<JvmTestSuite>("test") {
71-
useJUnitJupiter()
72-
listOf("7.4", "7.6.5", "8.0.2", "8.14.3").forEach { gradleVersionUnderTest ->
73-
targets.register("test${gradleVersionUnderTest}") {
74-
testTask {
75-
group = LifecycleBasePlugin.VERIFICATION_GROUP
76-
description = "Runs tests against Gradle $gradleVersionUnderTest"
77-
systemProperty("gradleVersionUnderTest", gradleVersionUnderTest)
78-
exclude("**/*SamplesTest.class") // Not yet cross-version ready
79-
exclude("**/initialization/**") // Settings plugin only for Gradle 8.8+
80-
if (gradleVersionUnderTest == "7.4") {
81-
// Configuration cache only "reliable" since 7.6 (?)
82-
// https://github.com/gradlex-org/java-module-dependencies/issues/129
83-
exclude("**/configcache/**")
84-
}
85-
}
86-
}
53+
val modulePropertiesScope = detachedResolver.configurations.dependencyScope("moduleProperties")
54+
val modulePropertiesPath =
55+
detachedResolver.configurations.resolvable("modulePropertiesPath") { extendsFrom(modulePropertiesScope.get()) }
56+
val dep = detachedResolver.dependencies.add(modulePropertiesScope.name, "com.github.sormuras.modules:modules:1")
57+
58+
(dep as ExternalModuleDependency).isChanging = true
59+
60+
val updateUniqueModulesProperties =
61+
tasks.register<UniqueModulesPropertiesUpdate>("updateUniqueModulesProperties") {
62+
skipUpdate.set(providers.environmentVariable("CI").getOrElse("false").toBoolean())
63+
modulesProperties.from(modulePropertiesPath)
64+
uniqueModulesProperties.set(
65+
layout.projectDirectory.file(
66+
"src/main/resources/org/gradlex/javamodule/dependencies/unique_modules.properties"
67+
)
68+
)
8769
}
88-
targets.all {
89-
testTask {
90-
maxParallelForks = 4
91-
inputs.dir(layout.projectDirectory.dir("samples"))
92-
inputs.dir("samples")
70+
71+
sourceSets.main {
72+
resources.setSrcDirs(
73+
listOf(
74+
updateUniqueModulesProperties.map {
75+
it.uniqueModulesProperties.get().asFile.parentFile.parentFile.parentFile.parentFile.parentFile
76+
}
77+
)
78+
)
79+
}
80+
81+
abstract class UniqueModulesPropertiesUpdate : DefaultTask() {
82+
83+
@get:Inject abstract val layout: ProjectLayout
84+
85+
@get:Input abstract val skipUpdate: Property<Boolean>
86+
87+
@get:InputFiles abstract val modulesProperties: ConfigurableFileCollection
88+
89+
@get:OutputFile abstract val uniqueModulesProperties: RegularFileProperty
90+
91+
@TaskAction
92+
fun convert() {
93+
if (skipUpdate.get()) {
94+
return
9395
}
96+
97+
val modulesToRepoLocation = Properties()
98+
modulesToRepoLocation.load(modulesProperties.singleFile.inputStream())
99+
val modules =
100+
modulesToRepoLocation
101+
.toSortedMap { e1, e2 -> e1.toString().compareTo(e2.toString()) }
102+
.map { entry ->
103+
val split = entry.value.toString().split("/")
104+
val group = split.subList(4, split.size - 3).joinToString(".")
105+
val name =
106+
split[split.size - 3]
107+
// Special handling of "wrong" entries
108+
.replace("-debug-jdk18on", "-jdk18on")
109+
val version = split[split.size - 2]
110+
Module(entry.key.toString(), "$group:$name", version)
111+
}
112+
.groupBy { it.ga }
113+
.values
114+
.map { moduleList -> moduleList.maxBy { VersionNumber.parse(it.version) } }
115+
.sortedBy { it.name }
116+
117+
val modulesToCoordinates = modules.map { "${it.name}=${it.ga}\n" }
118+
uniqueModulesProperties.get().asFile.writeText(modulesToCoordinates.joinToString("").trim())
94119
}
120+
121+
data class Module(val name: String, val ga: String, val version: String)
95122
}

gradle/checkstyle/checkstyle.xml

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

gradle/checkstyle/header.txt

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
toolchainVersion=17

gradle/plugins/build.gradle.kts

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

gradle/plugins/settings.gradle.kts

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

gradle/plugins/src/main/kotlin/gradlexbuild.module-mappings.gradle.kts

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

gradle/plugins/src/main/kotlin/gradlexbuild/UniqueModulesPropertiesUpdate.kt

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

settings.gradle.kts

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,3 @@
1-
pluginManagement {
2-
includeBuild("gradle/plugins")
3-
}
4-
plugins {
5-
id("com.gradle.develocity") version "4.2.2"
6-
}
7-
8-
dependencyResolutionManagement {
9-
repositories {
10-
mavenCentral()
11-
gradlePluginPortal()
12-
}
13-
}
1+
plugins { id("org.gradlex.internal-build-conventions") version "0.8" }
142

153
rootProject.name = "java-module-dependencies"
16-
17-
develocity {
18-
buildScan {
19-
termsOfUseUrl = "https://gradle.com/help/legal-terms-of-use"
20-
termsOfUseAgree = "yes"
21-
}
22-
}

src/test/java/org/gradlex/javamodule/dependencies/test/initialization/SettingsPluginIncludeTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818

1919
import org.gradlex.javamodule.dependencies.test.fixture.GradleBuild;
2020
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Tag;
2122
import org.junit.jupiter.api.Test;
2223

2324
import static java.util.Objects.requireNonNull;
2425
import static org.assertj.core.api.Assertions.assertThat;
2526
import static org.gradle.testkit.runner.TaskOutcome.SUCCESS;
2627

28+
@Tag("no-cross-version")
2729
class SettingsPluginIncludeTest {
2830

2931
GradleBuild build = new GradleBuild();

0 commit comments

Comments
 (0)