Skip to content

Commit 599ec6a

Browse files
committed
Migrate build to shared convention plugins setup
1 parent 8c3ae7b commit 599ec6a

File tree

15 files changed

+108
-202
lines changed

15 files changed

+108
-202
lines changed

.github/workflows/ci-build.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ jobs:
1212
steps:
1313
- name: git clone
1414
uses: actions/checkout@v5
15+
- name: git clone gradlex-build-conventions
16+
uses: actions/checkout@v5
17+
with:
18+
repository: gradlex-org/plugin-publish-conventions
19+
path: build/plugin-publish-conventions
20+
ref: new-convention-plugins
1521
- name: Set up JDK
1622
uses: actions/setup-java@v5
1723
with:

build.gradle.kts

Lines changed: 86 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,30 @@
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.1.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

4218
pluginPublishConventions {
4319
id("${project.group}.${project.name}")
4420
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin")
4521
displayName("Java Module Dependencies Gradle Plugin")
4622
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
23+
additionalPlugin("${project.group}.java-module-versions") {
24+
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleVersionsPlugin")
25+
displayName("Java Module Versions Gradle Plugin")
26+
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
27+
}
4728
tags("gradlex", "java", "modularity", "jigsaw", "jpms", "dependencies", "versions")
4829
gitHub("https://github.com/gradlex-org/java-module-dependencies")
4930
developer {
@@ -53,43 +34,88 @@ pluginPublishConventions {
5334
}
5435
}
5536

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-
}
37+
testingConventions { testGradleVersions("7.4", "7.6.5", "8.0.2", "8.14.3") }
6338

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

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-
}
52+
val modulePropertiesScope = detachedResolver.configurations.dependencyScope("moduleProperties")
53+
val modulePropertiesPath =
54+
detachedResolver.configurations.resolvable("modulePropertiesPath") { extendsFrom(modulePropertiesScope.get()) }
55+
val dep = detachedResolver.dependencies.add(modulePropertiesScope.name, "com.github.sormuras.modules:modules:1")
56+
57+
(dep as ExternalModuleDependency).isChanging = true
58+
59+
val updateUniqueModulesProperties =
60+
tasks.register<UniqueModulesPropertiesUpdate>("updateUniqueModulesProperties") {
61+
skipUpdate.set(providers.environmentVariable("CI").getOrElse("false").toBoolean())
62+
modulesProperties.from(modulePropertiesPath)
63+
uniqueModulesProperties.set(
64+
layout.projectDirectory.file(
65+
"src/main/resources/org/gradlex/javamodule/dependencies/unique_modules.properties"
66+
)
67+
)
8768
}
88-
targets.all {
89-
testTask {
90-
maxParallelForks = 4
91-
inputs.dir(layout.projectDirectory.dir("samples"))
92-
inputs.dir("samples")
69+
70+
sourceSets.main {
71+
resources.setSrcDirs(
72+
listOf(
73+
updateUniqueModulesProperties.map {
74+
it.uniqueModulesProperties.get().asFile.parentFile.parentFile.parentFile.parentFile.parentFile
75+
}
76+
)
77+
)
78+
}
79+
80+
abstract class UniqueModulesPropertiesUpdate : DefaultTask() {
81+
82+
@get:Inject abstract val layout: ProjectLayout
83+
84+
@get:Input abstract val skipUpdate: Property<Boolean>
85+
86+
@get:InputFiles abstract val modulesProperties: ConfigurableFileCollection
87+
88+
@get:OutputFile abstract val uniqueModulesProperties: RegularFileProperty
89+
90+
@TaskAction
91+
fun convert() {
92+
if (skipUpdate.get()) {
93+
return
9394
}
95+
96+
val modulesToRepoLocation = Properties()
97+
modulesToRepoLocation.load(modulesProperties.singleFile.inputStream())
98+
val modules =
99+
modulesToRepoLocation
100+
.toSortedMap { e1, e2 -> e1.toString().compareTo(e2.toString()) }
101+
.map { entry ->
102+
val split = entry.value.toString().split("/")
103+
val group = split.subList(4, split.size - 3).joinToString(".")
104+
val name =
105+
split[split.size - 3]
106+
// Special handling of "wrong" entries
107+
.replace("-debug-jdk18on", "-jdk18on")
108+
val version = split[split.size - 2]
109+
Module(entry.key.toString(), "$group:$name", version)
110+
}
111+
.groupBy { it.ga }
112+
.values
113+
.map { moduleList -> moduleList.maxBy { VersionNumber.parse(it.version) } }
114+
.sortedBy { it.name }
115+
116+
val modulesToCoordinates = modules.map { "${it.name}=${it.ga}\n" }
117+
uniqueModulesProperties.get().asFile.writeText(modulesToCoordinates.joinToString("").trim())
94118
}
119+
120+
data class Module(val name: String, val ga: String, val version: String)
95121
}

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: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,5 @@
1-
pluginManagement {
2-
includeBuild("gradle/plugins")
3-
}
4-
plugins {
5-
id("com.gradle.develocity") version "4.2.1"
6-
}
1+
pluginManagement { includeBuild("../plugin-publish-conventions") }
72

8-
dependencyResolutionManagement {
9-
repositories {
10-
mavenCentral()
11-
gradlePluginPortal()
12-
}
13-
}
3+
plugins { id("org.gradlex.internal.gradlex-build-conventions") version "0.7" }
144

155
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-
}

0 commit comments

Comments
 (0)