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
2 changes: 1 addition & 1 deletion .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@ jobs:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@v5
- run: "./gradlew build"
- run: "./gradlew build -Psigning.disable"
19 changes: 19 additions & 0 deletions .github/workflows/dependency-submission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Dependency Submission

on: [ push ]

permissions:
contents: write

jobs:
dependency-submission:
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v5
- name: Generate and submit dependency graph
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"
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ jobs:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@v5
- run: "./gradlew publishAggregationToCentralPortal -Psign=true"
- run: "./gradlew publishAggregationToCentralPortal"
env:
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSPHRASE: ${{ secrets.SIGNING_PASSPHRASE }}
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
224 changes: 142 additions & 82 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,105 +1,165 @@
plugins {
val nmcpVersion = "1.2.0"

id("com.gradleup.nmcp") version nmcpVersion
id("com.gradleup.nmcp.aggregation") version nmcpVersion
id("java-library")
id("maven-publish")
id("signing")
id("checkstyle")
id("gradlexbuild.module-mappings")
}
import java.util.Properties
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.util.internal.VersionNumber

group = "org.gradlex"
version = "0.2"

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

tasks.compileJava {
options.release = 8
dependencies {
compileOnly("org.apache.maven:maven-core:3.9.11") {
exclude("com.google.guava", "failureaccess")
exclude("com.google.guava", "guava")
exclude("com.google.inject", "guice")
exclude("javax.inject", "javax.inject")
exclude("org.apache.maven.resolver", "maven-resolver-api")
exclude("org.apache.maven.resolver", "maven-resolver-impl")
exclude("org.apache.maven.resolver", "maven-resolver-spi")
exclude("org.apache.maven.resolver", "maven-resolver-util")
exclude("org.apache.maven.shared", "maven-shared-utils")
exclude("org.apache.maven", "maven-artifact")
exclude("org.apache.maven", "maven-builder-support")
exclude("org.apache.maven", "maven-model-builder")
exclude("org.apache.maven", "maven-plugin-api")
exclude("org.apache.maven", "maven-repository-metadata")
exclude("org.apache.maven", "maven-resolver-provider")
exclude("org.apache.maven", "maven-settings-builder")
exclude("org.apache.maven", "maven-settings")
exclude("org.codehaus.plexus", "plexus-component-annotations")
exclude("org.eclipse.sisu", "org.eclipse.sisu.inject")
exclude("org.eclipse.sisu", "org.eclipse.sisu.plexus")
exclude("org.slf4j", "slf4j-api")
}
testImplementation("io.takari.maven.plugins:takari-plugin-integration-testing:3.1.1") {
exclude("com.google.guava", "failureaccess")
exclude("com.google.guava", "guava")
exclude("com.google.inject", "guice")
exclude("javax.inject", "javax.inject")
exclude("org.apache.maven.resolver", "maven-resolver-api")
exclude("org.apache.maven.resolver", "maven-resolver-impl")
exclude("org.apache.maven.resolver", "maven-resolver-spi")
exclude("org.apache.maven.resolver", "maven-resolver-util")
exclude("org.apache.maven.shared", "maven-shared-utils")
exclude("org.apache.maven", "maven-artifact")
exclude("org.apache.maven", "maven-builder-support")
exclude("org.apache.maven", "maven-model-builder")
exclude("org.apache.maven", "maven-plugin-api")
exclude("org.apache.maven", "maven-repository-metadata")
exclude("org.apache.maven", "maven-resolver-provider")
exclude("org.apache.maven", "maven-settings-builder")
exclude("org.apache.maven", "maven-settings")
exclude("org.codehaus.plexus", "plexus-component-annotations")
exclude("org.eclipse.sisu", "org.eclipse.sisu.inject")
exclude("org.eclipse.sisu", "org.eclipse.sisu.plexus")
exclude("org.slf4j", "slf4j-api")
exclude("org.slf4j", "slf4j-simple")
exclude("io.takari.m2e.workspace", "org.eclipse.m2e.workspace.cli")
}
}

tasks.withType<Javadoc>().configureEach {
options {
this as StandardJavadocDocletOptions
encoding = "UTF-8"
addStringOption("Xdoclint:all,-missing", "-quiet")
addStringOption("Xwerror", "-quiet")
publishingConventions {
mavenCentral {
displayName("Java Module Dependencies Maven Extension")
description("A Maven extension to use dependencies from module-info.java files.")
}
gitHub("https://github.com/gradlex-org/java-module-dependencies-maven-extension")
developer {
name = "Jendrik Johannes"
email = "[email protected]"
}
}

dependencies {
compileOnly("org.apache.maven:maven-core:3.9.11")
publishing { repositories.maven(layout.buildDirectory.dir("test-repo")) { name = "testRepo" } }

nmcpAggregation(project(path))
tasks.test { dependsOn(tasks.named("publishAllPublicationsToTestRepoRepository")) }

testImplementation("org.assertj:assertj-core:3.27.6")
testImplementation("io.takari.maven.plugins:takari-plugin-integration-testing:3.1.1")
}
// update 'unique_modules.properties'
val detachedResolver: ProjectInternal.DetachedResolver = (project as ProjectInternal).newDetachedResolver()

publishing {
publications.create<MavenPublication>("maven") {
from(components["java"])
pom {
name = "Java Module Dependencies Maven Extension"
description = "A Maven extension to use dependencies from module-info.java files."
url = "https://github.com/gradlex-org/java-module-dependencies-maven-extension"
licenses {
license {
name = "Apache License, Version 2.0"
url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
}
}
scm {
connection = "scm:git:git://github.com/gradlex-org/java-module-dependencies-maven-extension.git"
developerConnection = "scm:git:git://github.com/gradlex-org/java-module-dependencies-maven-extension.git"
url = "https://github.com/gradlex-org/java-module-dependencies-maven-extension"
}
developers {
developer {
name = "Jendrik Johannes"
email = "[email protected]"
}
}
}
}
repositories.maven(layout.buildDirectory.dir("test-repo")) {
name = "testRepo"
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)
}
}

signing {
if (providers.gradleProperty("sign").getOrElse("false").toBoolean()) {
useInMemoryPgpKeys(
providers.environmentVariable("SIGNING_KEY").getOrNull(),
providers.environmentVariable("SIGNING_PASSPHRASE").getOrNull()
)
sign(publishing.publications["maven"])
}
}
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

nmcpAggregation {
centralPortal {
username = providers.environmentVariable("MAVEN_CENTRAL_USERNAME")
password = providers.environmentVariable("MAVEN_CENTRAL_PASSWORD")
publishingType = "AUTOMATIC" // "USER_MANAGED"
val updateUniqueModulesProperties =
tasks.register<UniqueModulesPropertiesUpdate>("updateUniqueModulesProperties") {
skipUpdate = providers.environmentVariable("CI").getOrElse("false").toBoolean()
modulesProperties.from(modulePropertiesPath)
uniqueModulesProperties =
layout.projectDirectory.file(
"src/main/resources/org/gradlex/maven/javamodule/dependencies/unique_modules.properties"
)
}

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

testing.suites.named<JvmTestSuite>("test") {
useJUnitJupiter()
targets.configureEach {
testTask {
dependsOn(tasks.named("publishAllPublicationsToTestRepoRepository"))
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())
}
}

checkstyle {
configDirectory = layout.projectDirectory.dir("gradle/checkstyle")
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.

Loading
Loading