1- plugins {
2- id(" groovy" )
3- id(" gradlexbuild.lifecycle" )
4- id(" gradlexbuild.asciidoctor-conventions" )
5- id(" org.gradlex.internal.plugin-publish-conventions" ) version " 0.6"
6- }
1+ import java.net.URLClassLoader
2+ import org.asciidoctor.gradle.base.AsciidoctorAttributeProvider
73
8- group = " org.gradlex"
9- version = " 2.4"
4+ plugins { id(" groovy" ) } // TODO migrate tests to Java
105
11- java {
12- toolchain.languageVersion = JavaLanguageVersion .of(17 )
13- }
14-
15- tasks.withType<JavaCompile >().configureEach {
16- options.release = 8
17- }
6+ group = " org.gradlex"
187
19- tasks.withType<Javadoc >().configureEach {
20- options {
21- this as StandardJavadocDocletOptions
22- encoding = " UTF-8"
23- addStringOption(" Xdoclint:all,-missing" , " -quiet" )
24- addStringOption(" Xwerror" , " -quiet" )
25- }
26- }
8+ version = " 2.4"
279
28- val tagsList = listOf (
29- " dependency" , " dependencies" , " dependency-management" , " capabilities" , " java" , " logging" ,
30- " asm" , " bouncycastle" , " cglib" , " commons-io" , " dom4j" , " guava" , " hamcrest" , " javax" , " jakarta" , " junit" ,
31- " mysql" , " postgresql" , " stax" , " slf4j" , " log4j2" , " velocity" , " woodstox"
32- )
10+ val tagsList =
11+ listOf (
12+ " dependency" ,
13+ " dependencies" ,
14+ " dependency-management" ,
15+ " capabilities" ,
16+ " java" ,
17+ " logging" ,
18+ " asm" ,
19+ " bouncycastle" ,
20+ " cglib" ,
21+ " commons-io" ,
22+ " dom4j" ,
23+ " guava" ,
24+ " hamcrest" ,
25+ " javax" ,
26+ " jakarta" ,
27+ " junit" ,
28+ " mysql" ,
29+ " postgresql" ,
30+ " stax" ,
31+ " slf4j" ,
32+ " log4j2" ,
33+ " velocity" ,
34+ " woodstox" ,
35+ )
3336
3437pluginPublishConventions {
3538 id(" org.gradlex.jvm-dependency-conflict-resolution" )
@@ -58,7 +61,7 @@ pluginPublishConventions {
5861
5962gradlePlugin {
6063 plugins {
61- create (" jvm-dependency-conflict-detection" ) {
64+ register (" jvm-dependency-conflict-detection" ) {
6265 id = " org.gradlex.jvm-dependency-conflict-detection"
6366 implementationClass = " org.gradlex.jvm.dependency.conflict.detection.JvmDependencyConflictDetectionPlugin"
6467 displayName = " JVM Conflict Detection Gradle Plugin"
@@ -74,28 +77,54 @@ dependencies {
7477 testRuntimeOnly(" org.junit.vintage:junit-vintage-engine" )
7578}
7679
77- testing.suites.named<JvmTestSuite >(" test" ) {
78- useJUnitJupiter()
79- listOf (" 6.8.3" , " 6.9.4" , " 7.0.2" , " 8.0.2" , " 8.14.3" ).forEach { gradleVersionUnderTest ->
80- targets.register(" test${gradleVersionUnderTest} " ) {
81- testTask {
82- group = LifecycleBasePlugin .VERIFICATION_GROUP
83- description = " Runs tests against Gradle $gradleVersionUnderTest "
84- useJUnitPlatform {
85- excludeTags(" no-cross-version" )
80+ testingConventions { testGradleVersions(" 6.8.3" , " 6.9.4" , " 7.0.2" , " 8.0.2" , " 8.14.3" ) }
81+
82+ val generateCapabilitiesList =
83+ tasks.register<CapabilityListing >(" generateCapabilitiesList" ) {
84+ pluginClasses.from(tasks.jar)
85+ outputFile = layout.buildDirectory.file(" generated/docs/asciidoc/parts/capabilities-listing.adoc" )
86+ }
87+
88+ tasks.asciidoctor {
89+ dependsOn(generateCapabilitiesList)
90+ attributeProviders + = AsciidoctorAttributeProvider {
91+ mapOf (" capabilities-listing" to generateCapabilitiesList.get().outputFile.get().asFile.absolutePath)
92+ }
93+ }
94+
95+ abstract class CapabilityListing : DefaultTask () {
96+
97+ @get:OutputFile abstract val outputFile: RegularFileProperty
98+
99+ @get:Classpath abstract val pluginClasses: ConfigurableFileCollection
100+
101+ @TaskAction
102+ fun update () {
103+ val classesUrls = pluginClasses.files.map { it.toURI().toURL() }
104+ val loader =
105+ URLClassLoader (" pluginClasspath" , classesUrls.toTypedArray(), ComponentMetadataRule ::class .java.classLoader)
106+ val definitions = loader.loadClass(" org.gradlex.jvm.dependency.conflict.detection.rules.CapabilityDefinition" )
107+
108+ val allCapabilities =
109+ definitions.enumConstants
110+ .map { rule ->
111+ val capability = definitions.getDeclaredMethod(" getCapability" ).invoke(rule) as String
112+ val modules = definitions.getDeclaredMethod(" getModules" ).invoke(rule) as List <* >
113+
114+ Pair (capability, modules)
86115 }
87- systemProperty( " gradleVersionUnderTest " , gradleVersionUnderTest)
116+ .sortedBy { it.first }
88117
89- exclude(" **/*SamplesTest.class" ) // Not yet cross-version ready
118+ val capabilityList =
119+ allCapabilities.joinToString(" " ) { c ->
120+ " * ${c.first} \n ${c.second.joinToString(" " ) { " ** ${(it as String ).asRepoLink()} \n " }} "
90121 }
122+
123+ outputFile.get().asFile.also {
124+ it.parentFile.mkdirs()
125+ it.writeText(capabilityList)
91126 }
92127 }
93- targets.all {
94- testTask {
95- maxParallelForks = 4
96- inputs.dir(layout.projectDirectory.dir(" samples" ))
97- inputs.dir(" src/docs/samples" )
98- }
99- }
100- }
101128
129+ private fun String.asRepoLink () = " https://search.maven.org/artifact/${replace(" :" , " /" )} [$this ]"
130+ }
0 commit comments