Skip to content

Commit 55a0a29

Browse files
committed
Migrate build to shared convention plugins setup
1 parent 8c3ae7b commit 55a0a29

File tree

15 files changed

+98
-202
lines changed

15 files changed

+98
-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: 76 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 org.gradle.api.internal.project.ProjectInternal
2+
import org.gradle.util.internal.VersionNumber
3+
import java.util.Properties
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,78 @@ 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")
37+
testingConventions { testGradleVersions("7.4", "7.6.5", "8.0.2", "8.14.3") }
38+
39+
val detachedResolver: ProjectInternal.DetachedResolver = (project as ProjectInternal).newDetachedResolver()
40+
detachedResolver.repositories.ivy {
41+
name = "Modules Properties Repository"
42+
url = project.uri("https://raw.githubusercontent.com/sormuras/modules/main/com.github.sormuras.modules")
43+
metadataSources.artifact()
44+
patternLayout {
45+
artifact("[organisation]/[module].properties")
46+
ivy("[module]/[revision]/ivy.xml")
47+
setM2compatible(true)
48+
}
49+
}
50+
val modulePropertiesScope = detachedResolver.configurations.dependencyScope("moduleProperties")
51+
val modulePropertiesPath = detachedResolver.configurations.resolvable("modulePropertiesPath") {
52+
extendsFrom(modulePropertiesScope.get())
6253
}
54+
val dep = detachedResolver.dependencies.add(modulePropertiesScope.name, "com.github.sormuras.modules:modules:1")
55+
(dep as ExternalModuleDependency).isChanging = true
6356

64-
tasks.test {
65-
useJUnitPlatform()
66-
maxParallelForks = 4
67-
inputs.dir(layout.projectDirectory.dir("samples"))
57+
val updateUniqueModulesProperties = tasks.register<UniqueModulesPropertiesUpdate>("updateUniqueModulesProperties") {
58+
skipUpdate.set(providers.environmentVariable("CI").getOrElse("false").toBoolean())
59+
modulesProperties.from(modulePropertiesPath)
60+
uniqueModulesProperties.set(layout.projectDirectory.file(
61+
"src/main/resources/org/gradlex/javamodule/dependencies/unique_modules.properties")
62+
)
6863
}
6964

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-
}
87-
}
88-
targets.all {
89-
testTask {
90-
maxParallelForks = 4
91-
inputs.dir(layout.projectDirectory.dir("samples"))
92-
inputs.dir("samples")
65+
sourceSets.main {
66+
resources.setSrcDirs(listOf(updateUniqueModulesProperties.map {
67+
it.uniqueModulesProperties.get().asFile.parentFile.parentFile.parentFile.parentFile.parentFile
68+
}))
69+
}
70+
71+
72+
abstract class UniqueModulesPropertiesUpdate : DefaultTask() {
73+
74+
@get:Inject
75+
abstract val layout: ProjectLayout
76+
77+
@get:Input
78+
abstract val skipUpdate: Property<Boolean>
79+
80+
@get:InputFiles
81+
abstract val modulesProperties: ConfigurableFileCollection
82+
83+
@get:OutputFile
84+
abstract val uniqueModulesProperties: RegularFileProperty
85+
86+
@TaskAction
87+
fun convert() {
88+
if (skipUpdate.get()) {
89+
return
9390
}
91+
92+
val modulesToRepoLocation = Properties()
93+
modulesToRepoLocation.load(modulesProperties.singleFile.inputStream())
94+
val modules = modulesToRepoLocation.toSortedMap { e1, e2 -> e1.toString().compareTo(e2.toString()) }.map { entry ->
95+
val split = entry.value.toString().split("/")
96+
val group = split.subList(4, split.size - 3).joinToString(".")
97+
val name = split[split.size - 3]
98+
// Special handling of "wrong" entries
99+
.replace("-debug-jdk18on", "-jdk18on")
100+
val version = split[split.size - 2]
101+
Module(entry.key.toString(), "$group:$name", version)
102+
}.groupBy { it.ga }.values.map { moduleList ->
103+
moduleList.maxBy { VersionNumber.parse(it.version) }
104+
}.sortedBy { it.name }
105+
106+
val modulesToCoordinates = modules.map { "${it.name}=${it.ga}\n" }
107+
uniqueModulesProperties.get().asFile.writeText(modulesToCoordinates.joinToString("").trim())
94108
}
109+
110+
data class Module(val name: String, val ga: String, val version: String)
95111
}

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("build/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)