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
17 changes: 17 additions & 0 deletions .github/workflows/dependency-submission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Dependency Submission

on: [ push ]

permissions:
contents: write

jobs:
dependency-submission:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: gradle/actions/dependency-submission@v5
with:
build-scan-publish: true
build-scan-terms-of-use-url: "https://gradle.com/help/legal-terms-of-use"
build-scan-terms-of-use-agree: "yes"
165 changes: 98 additions & 67 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,50 +1,35 @@
plugins {
id("gradlexbuild.module-mappings")
id("org.gradlex.internal.plugin-publish-conventions") version "0.6"
}
import java.util.Properties
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.util.internal.VersionNumber

group = "org.gradlex"
version = "1.11"

java {
toolchain.languageVersion = JavaLanguageVersion.of(17)
}

tasks.compileJava {
options.release = 8
}

tasks.withType<Javadoc>().configureEach {
options {
this as StandardJavadocDocletOptions
encoding = "UTF-8"
addStringOption("Xdoclint:all,-missing", "-quiet")
addStringOption("Xwerror", "-quiet")
}
}

configurations.compileClasspath {
// Allow Java 11 dependencies on compile classpath
attributes.attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 11)
}

dependencies {
implementation("org.ow2.asm:asm:9.9")

compileOnly("org.gradlex:extra-java-module-info:1.13.1")
compileOnly("com.autonomousapps:dependency-analysis-gradle-plugin:3.4.0")

testImplementation("org.assertj:assertj-core:3.27.6")
testImplementation("org.gradle.exemplar:samples-check:1.0.3")
testRuntimeOnly("org.junit.vintage:junit-vintage-engine")
compileOnly("com.autonomousapps:dependency-analysis-gradle-plugin:3.4.0") {
exclude("dev.zacsweers.moshix", "moshi-sealed-runtime")
exclude("javax.inject", "javax.inject")
}
}

pluginPublishConventions {
id("${project.group}.${project.name}")
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin")
displayName("Java Module Dependencies Gradle Plugin")
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
tags("gradlex", "java", "modularity", "jigsaw", "jpms", "dependencies", "versions")
publishingConventions {
pluginPortal("${project.group}.${project.name}") {
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleDependenciesPlugin")
displayName("Java Module Dependencies Gradle Plugin")
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
tags("gradlex", "java", "modularity", "jigsaw", "jpms", "dependencies", "versions")
}
pluginPortal("${project.group}.java-module-versions") {
implementationClass("org.gradlex.javamodule.dependencies.JavaModuleVersionsPlugin")
displayName("Java Module Versions Gradle Plugin")
description("A plugin that makes Gradle respect the dependencies defined in 'module-info.java' files.")
}
gitHub("https://github.com/gradlex-org/java-module-dependencies")
developer {
id.set("jjohannes")
Expand All @@ -53,43 +38,89 @@ pluginPublishConventions {
}
}

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

val detachedResolver: ProjectInternal.DetachedResolver = (project as ProjectInternal).newDetachedResolver()

tasks.test {
useJUnitPlatform()
maxParallelForks = 4
inputs.dir(layout.projectDirectory.dir("samples"))
detachedResolver.repositories.ivy {
name = "Modules Properties Repository"
url = project.uri("https://raw.githubusercontent.com/sormuras/modules/main/com.github.sormuras.modules")
metadataSources.artifact()
patternLayout {
artifact("[organisation]/[module].properties")
ivy("[module]/[revision]/ivy.xml")
setM2compatible(true)
}
}

testing.suites.named<JvmTestSuite>("test") {
useJUnitJupiter()
listOf("7.4", "7.6.5", "8.0.2", "8.14.3").forEach { gradleVersionUnderTest ->
targets.register("test${gradleVersionUnderTest}") {
testTask {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = "Runs tests against Gradle $gradleVersionUnderTest"
systemProperty("gradleVersionUnderTest", gradleVersionUnderTest)
exclude("**/*SamplesTest.class") // Not yet cross-version ready
exclude("**/initialization/**") // Settings plugin only for Gradle 8.8+
if (gradleVersionUnderTest == "7.4") {
// Configuration cache only "reliable" since 7.6 (?)
// https://github.com/gradlex-org/java-module-dependencies/issues/129
exclude("**/configcache/**")
}
}
}
val modulePropertiesScope = detachedResolver.configurations.dependencyScope("moduleProperties")
val modulePropertiesPath =
detachedResolver.configurations.resolvable("modulePropertiesPath") { extendsFrom(modulePropertiesScope.get()) }
val dep =
detachedResolver.dependencies.add(modulePropertiesScope.name, "com.github.sormuras.modules:modules:1@properties")

(dep as ExternalModuleDependency).isChanging = true

val updateUniqueModulesProperties =
tasks.register<UniqueModulesPropertiesUpdate>("updateUniqueModulesProperties") {
skipUpdate.set(providers.environmentVariable("CI").getOrElse("false").toBoolean())
modulesProperties.from(modulePropertiesPath)
uniqueModulesProperties.set(
layout.projectDirectory.file(
"src/main/resources/org/gradlex/javamodule/dependencies/unique_modules.properties"
)
)
}
targets.all {
testTask {
maxParallelForks = 4
inputs.dir(layout.projectDirectory.dir("samples"))
inputs.dir("samples")

sourceSets.main {
resources.setSrcDirs(
listOf(
updateUniqueModulesProperties.map {
it.uniqueModulesProperties.get().asFile.parentFile.parentFile.parentFile.parentFile.parentFile
}
)
)
}

abstract class UniqueModulesPropertiesUpdate : DefaultTask() {

@get:Inject abstract val layout: ProjectLayout

@get:Input abstract val skipUpdate: Property<Boolean>

@get:InputFiles abstract val modulesProperties: ConfigurableFileCollection

@get:OutputFile abstract val uniqueModulesProperties: RegularFileProperty

@TaskAction
fun convert() {
if (skipUpdate.get()) {
return
}

val modulesToRepoLocation = Properties()
modulesToRepoLocation.load(modulesProperties.singleFile.inputStream())
val modules =
modulesToRepoLocation
.toSortedMap { e1, e2 -> e1.toString().compareTo(e2.toString()) }
.map { entry ->
val split = entry.value.toString().split("/")
val group = split.subList(4, split.size - 3).joinToString(".")
val name =
split[split.size - 3]
// Special handling of "wrong" entries
.replace("-debug-jdk18on", "-jdk18on")
val version = split[split.size - 2]
Module(entry.key.toString(), "$group:$name", version)
}
.groupBy { it.ga }
.values
.map { moduleList -> moduleList.maxBy { VersionNumber.parse(it.version) } }
.sortedBy { it.name }

val modulesToCoordinates = modules.map { "${it.name}=${it.ga}\n" }
uniqueModulesProperties.get().asFile.writeText(modulesToCoordinates.joinToString("").trim())
}

data class Module(val name: String, val ga: String, val version: String)
}
8 changes: 0 additions & 8 deletions gradle/checkstyle/checkstyle.xml

This file was deleted.

15 changes: 0 additions & 15 deletions gradle/checkstyle/header.txt

This file was deleted.

1 change: 1 addition & 0 deletions gradle/gradle-daemon-jvm.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
toolchainVersion=17
3 changes: 0 additions & 3 deletions gradle/plugins/build.gradle.kts

This file was deleted.

3 changes: 0 additions & 3 deletions gradle/plugins/settings.gradle.kts

This file was deleted.

This file was deleted.

This file was deleted.

Loading
Loading