Skip to content

Commit 1d640e7

Browse files
committed
Add APIs to use version catalog accessors as coordinates
Resolves #41
1 parent d4a1075 commit 1d640e7

File tree

9 files changed

+197
-51
lines changed

9 files changed

+197
-51
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## Version 1.4
44
* [New] Minimal Gradle version is now 6.8 for integration with recently added features like the Dependency Version Catalog
5+
* [New] [#41](https://github.com/gradlex-org/extra-java-module-info/issues/41) - Support version catalog accessors to express dependency coordinates (Thanks [Giuseppe Barbieri](https://github.com/elect86) for suggesting!)
56
* [Fixed] [#47](https://github.com/gradlex-org/extra-java-module-info/issues/47) - requireAllDefinedDependencies() gives error when dependency only appears on runtime path (Thanks [Sola](https://github.com/unlimitedsola) for reporting!)
67
* [Fixed] [#45](https://github.com/gradlex-org/extra-java-module-info/issues/45) - Sub-folders in 'META-INF/services' are not ignored (Thanks [Jonas Beyer](https://github.com/j-beyer) for reporting!)
78
* [Fixed] [#44](https://github.com/gradlex-org/extra-java-module-info/issues/44) - Name resolution for jars with '-' character failing if Jars are taken from local .m2 repository (Thanks [Aidan Do](https://github.com/REslim30) for reporting!)

src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPluginExtension.java

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package org.gradlex.javamodule.moduleinfo;
1818

1919
import org.gradle.api.Action;
20+
import org.gradle.api.artifacts.MinimalExternalModuleDependency;
2021
import org.gradle.api.provider.MapProperty;
2122
import org.gradle.api.provider.Property;
23+
import org.gradle.api.provider.Provider;
2224

2325
import javax.annotation.Nullable;
2426

@@ -43,17 +45,38 @@ public void module(String identifier, String moduleName) {
4345
module(identifier, moduleName, null, null);
4446
}
4547

48+
/**
49+
* Add full module information for a given Jar file.
50+
*
51+
* @param alias group:name coordinates alias from version catalog
52+
* @param moduleName the Module Name of the Module to construct
53+
*/
54+
public void module(Provider<MinimalExternalModuleDependency> alias, String moduleName) {
55+
module(alias.get().getModule().toString(), moduleName);
56+
}
57+
4658
/**
4759
* Add full module information for a given Jar file.
4860
*
4961
* @param identifier group:name coordinates _or_ Jar file name
5062
* @param moduleName the Module Name of the Module to construct
51-
* @param moduleVersion version to write into the module-info.class
63+
* @param moduleVersion version to write into the module-info.class
5264
*/
5365
public void module(String identifier, String moduleName, String moduleVersion) {
5466
module(identifier, moduleName, moduleVersion, null);
5567
}
5668

69+
/**
70+
* Add full module information for a given Jar file.
71+
*
72+
* @param alias group:name coordinates alias from version catalog
73+
* @param moduleName the Module Name of the Module to construct
74+
* @param moduleVersion version to write into the module-info.class
75+
*/
76+
public void module(Provider<MinimalExternalModuleDependency> alias, String moduleName, String moduleVersion) {
77+
module(alias.get().getModule().toString(), moduleName, moduleVersion);
78+
}
79+
5780
/**
5881
* Add full module information for a given Jar file.
5982
*
@@ -65,6 +88,17 @@ public void module(String identifier, String moduleName, @Nullable Action<? supe
6588
module(identifier, moduleName, null, conf);
6689
}
6790

91+
/**
92+
* Add full module information for a given Jar file.
93+
*
94+
* @param alias group:name coordinates alias from version catalog
95+
* @param moduleName the Module Name of the Module to construct
96+
* @param conf configure exported packages and dependencies, see {@link ModuleInfo}
97+
*/
98+
public void module(Provider<MinimalExternalModuleDependency> alias, String moduleName, @Nullable Action<? super ModuleInfo> conf) {
99+
module(alias.get().getModule().toString(), moduleName, conf);
100+
}
101+
68102
/**
69103
* Add full module information for a given Jar file.
70104
*
@@ -81,6 +115,18 @@ public void module(String identifier, String moduleName, @Nullable String module
81115
this.getModuleSpecs().put(identifier, moduleInfo);
82116
}
83117

118+
/**
119+
* Add full module information for a given Jar file.
120+
*
121+
* @param alias group:name coordinates alias from version catalog
122+
* @param moduleName the Module Name of the Module to construct
123+
* @param moduleVersion version to write into the module-info.class
124+
* @param conf configure exported packages, dependencies and Jar merging, see {@link ModuleInfo}
125+
*/
126+
public void module(Provider<MinimalExternalModuleDependency> alias, String moduleName, @Nullable String moduleVersion, @Nullable Action<? super ModuleInfo> conf) {
127+
module(alias.get().getModule().toString(), moduleName, moduleVersion, conf);
128+
}
129+
84130
/**
85131
* Add an Automatic-Module-Name to a given Jar file.
86132
*
@@ -91,6 +137,16 @@ public void automaticModule(String identifier, String moduleName) {
91137
automaticModule(identifier, moduleName, null);
92138
}
93139

140+
/**
141+
* Add an Automatic-Module-Name to a given Jar file.
142+
*
143+
* @param alias group:name coordinates alias from version catalog
144+
* @param moduleName the Module Name of the Module to construct
145+
*/
146+
public void automaticModule(Provider<MinimalExternalModuleDependency> alias, String moduleName) {
147+
automaticModule(alias.get().getModule().toString(), moduleName, null);
148+
}
149+
94150
/**
95151
* Add an Automatic-Module-Name to a given Jar file.
96152
*
@@ -106,6 +162,18 @@ public void automaticModule(String identifier, String moduleName, @Nullable Acti
106162
getModuleSpecs().put(identifier, automaticModuleName);
107163
}
108164

165+
166+
/**
167+
* Add an Automatic-Module-Name to a given Jar file.
168+
*
169+
* @param alias group:name coordinates alias from version catalog
170+
* @param moduleName the Module Name of the Module to construct
171+
* @param conf configure Jar merging, see {@link AutomaticModuleName}
172+
*/
173+
public void automaticModule(Provider<MinimalExternalModuleDependency> alias, String moduleName, @Nullable Action<? super AutomaticModuleName> conf) {
174+
automaticModule(alias.get().getModule().toString(), moduleName, conf);
175+
}
176+
109177
/**
110178
* Let the plugin know about an existing module on the module path.
111179
* This may be needed when 'requiresDirectivesFromMetadata(true)' is used.
@@ -116,4 +184,15 @@ public void automaticModule(String identifier, String moduleName, @Nullable Acti
116184
public void knownModule(String coordinates, String moduleName) {
117185
getModuleSpecs().put(coordinates, new KnownModule(coordinates, moduleName));
118186
}
187+
188+
/**
189+
* Let the plugin know about an existing module on the module path.
190+
* This may be needed when 'requiresDirectivesFromMetadata(true)' is used.
191+
*
192+
* @param alias group:name coordinates alias from version catalog
193+
* @param moduleName the Module Name of the Module referred to by the coordinates
194+
*/
195+
public void knownModule(Provider<MinimalExternalModuleDependency> alias, String moduleName) {
196+
knownModule(alias.get().getModule().toString(), moduleName);
197+
}
119198
}

src/main/java/org/gradlex/javamodule/moduleinfo/ModuleSpec.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package org.gradlex.javamodule.moduleinfo;
1818

19+
import org.gradle.api.artifacts.MinimalExternalModuleDependency;
20+
import org.gradle.api.provider.Provider;
21+
1922
import java.io.Serializable;
2023
import java.util.ArrayList;
2124
import java.util.List;
@@ -56,6 +59,13 @@ public void mergeJar(String identifier) {
5659
mergedJars.add(identifier);
5760
}
5861

62+
/**
63+
* @param alias group:name coordinates alias from version catalog
64+
*/
65+
public void mergeJar(Provider<MinimalExternalModuleDependency> alias) {
66+
mergeJar(alias.get().getModule().toString());
67+
}
68+
5969
/**
6070
* @return all merged Jar identifiers
6171
*/

src/test/groovy/org/gradlex/javamodule/moduleinfo/test/AbstractFunctionalTest.groovy

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,18 @@ abstract class AbstractFunctionalTest extends Specification {
129129
}
130130
131131
extraJavaModuleInfo {
132-
module("${libs.commonsBeanutils}", "org.apache.commons.beanutils") {
132+
module(${libs.commonsBeanutils}, "org.apache.commons.beanutils") {
133133
exports("org.apache.commons.beanutils")
134134
135135
requires("org.apache.commons.logging")
136136
requires("java.sql")
137137
requires("java.desktop")
138138
}
139-
module("${libs.commonsCli}", "org.apache.commons.cli") {
139+
module(${libs.commonsCli}, "org.apache.commons.cli") {
140140
exports("org.apache.commons.cli")
141141
}
142-
module("${libs.commonsCollections}", "org.apache.commons.collections")
143-
automaticModule("${libs.commonsLogging}", "org.apache.commons.logging")
142+
module(${libs.commonsCollections}, "org.apache.commons.collections")
143+
automaticModule(${libs.commonsLogging}, "org.apache.commons.logging")
144144
}
145145
"""
146146

@@ -178,7 +178,7 @@ abstract class AbstractFunctionalTest extends Specification {
178178
}
179179
180180
extraJavaModuleInfo {
181-
automaticModule("${libs.javaxInject}", "javax.inject")
181+
automaticModule(${libs.javaxInject}, "javax.inject")
182182
}
183183
"""
184184

@@ -216,7 +216,7 @@ abstract class AbstractFunctionalTest extends Specification {
216216
}
217217
218218
extraJavaModuleInfo {
219-
module("${libs.javaxInject}", "javax.inject") {
219+
module(${libs.javaxInject}, "javax.inject") {
220220
exports("javax.inject")
221221
}
222222
}
@@ -259,7 +259,7 @@ abstract class AbstractFunctionalTest extends Specification {
259259
}
260260
261261
extraJavaModuleInfo {
262-
module("${libs.log4jCore}", "org.apache.logging.log4j.core", "2.14.0") {
262+
module(${libs.log4jCore}, "org.apache.logging.log4j.core", "2.14.0") {
263263
requires("java.compiler")
264264
requires("java.desktop")
265265
requires("org.apache.logging.log4j")
@@ -312,7 +312,7 @@ abstract class AbstractFunctionalTest extends Specification {
312312
}
313313
314314
extraJavaModuleInfo {
315-
module("${libs.groovyAll}", "groovy.all", "2.4.15") {
315+
module(${libs.groovyAll}, "groovy.all", "2.4.15") {
316316
requiresTransitive("java.scripting")
317317
requires("java.logging")
318318
requires("java.desktop")
@@ -348,7 +348,7 @@ abstract class AbstractFunctionalTest extends Specification {
348348
349349
extraJavaModuleInfo {
350350
failOnMissingModuleInfo.set(false)
351-
module("${libs.qpidJmsClient}", "qpid.jms.client")
351+
module(${libs.qpidJmsClient}, "qpid.jms.client")
352352
}
353353
"""
354354

@@ -402,7 +402,7 @@ abstract class AbstractFunctionalTest extends Specification {
402402
}
403403
404404
extraJavaModuleInfo {
405-
module("${libs.springBootAutoconfigure}", "spring.boot.autoconfigure") {
405+
module(${libs.springBootAutoconfigure}, "spring.boot.autoconfigure") {
406406
requires("spring.context")
407407
requiresTransitive("spring.boot")
408408
requiresStatic("com.google.gson")
@@ -499,15 +499,15 @@ abstract class AbstractFunctionalTest extends Specification {
499499
500500
extraJavaModuleInfo {
501501
failOnMissingModuleInfo.set(false)
502-
module("${libs.zookeeper}", "org.apache.zookeeper") {
503-
mergeJar("${libs.zookeeperJute}")
502+
module(${libs.zookeeper}, "org.apache.zookeeper") {
503+
mergeJar(${libs.zookeeperJute})
504504
505505
exports("org.apache.jute")
506506
exports("org.apache.zookeeper")
507507
exports("org.apache.zookeeper.server.persistence")
508508
}
509-
automaticModule("${libs.slf4jApi}", "org.slf4j") {
510-
mergeJar("${libs.slf4jExt}")
509+
automaticModule(${libs.slf4jApi}, "org.slf4j") {
510+
mergeJar(${libs.slf4jExt})
511511
}
512512
}
513513
@@ -639,7 +639,7 @@ org.apache.qpid.server.management.plugin.ConfiguredObjectRegistrationImpl''')
639639
}
640640
641641
extraJavaModuleInfo {
642-
module("${libs.commonsCollections}", "org.apache.commons.collections") {
642+
module(${libs.commonsCollections}, "org.apache.commons.collections") {
643643
exportAllPackages()
644644
}
645645
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.gradlex.javamodule.moduleinfo.test
2+
3+
import org.gradlex.javamodule.moduleinfo.test.fixture.GradleBuild
4+
import org.gradlex.javamodule.moduleinfo.test.fixture.LegacyLibraries
5+
import spock.lang.IgnoreIf
6+
7+
@IgnoreIf({ GradleBuild.gradleVersionUnderTest.startsWith("6.") })
8+
class AddressCatalogEntriesFunctionalTest extends AbstractFunctionalTest {
9+
10+
LegacyLibraries libs = new LegacyLibraries(false, true)
11+
12+
def setup() {
13+
if (build.gradleVersionUnderTest?.startsWith("7.0")) {
14+
settingsFile << '''
15+
enableFeaturePreview("VERSION_CATALOGS")
16+
'''
17+
}
18+
file("gradle/libs.versions.toml") << LegacyLibraries.catalog()
19+
}
20+
}

src/test/groovy/org/gradlex/javamodule/moduleinfo/test/ConfigurationDetailsFunctionalTest.groovy

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ConfigurationDetailsFunctionalTest extends Specification {
102102
}
103103
104104
extraJavaModuleInfo {
105-
automaticModule("${new LegacyLibraries().closureCompiler}", "com.google.javascript.closure.compiler")
105+
automaticModule(${new LegacyLibraries().closureCompiler}, "com.google.javascript.closure.compiler")
106106
}
107107
108108
application {
@@ -138,7 +138,7 @@ class ConfigurationDetailsFunctionalTest extends Specification {
138138
}
139139
140140
extraJavaModuleInfo {
141-
automaticModule("${new LegacyLibraries().sac}", "sac")
141+
automaticModule(${new LegacyLibraries().sac}, "sac")
142142
}
143143
144144
application {
@@ -179,10 +179,10 @@ class ConfigurationDetailsFunctionalTest extends Specification {
179179
}
180180
181181
extraJavaModuleInfo {
182-
module("${libs.commonsCli}", "org.apache.commons.cli", "8.1") {
182+
module(${libs.commonsCli}, "org.apache.commons.cli", "8.1") {
183183
exports("org.apache.commons.cli")
184184
}
185-
module("${libs.commonsCollections}", "org.apache.commons.collections", "9.2")
185+
module(${libs.commonsCollections}, "org.apache.commons.collections", "9.2")
186186
}
187187
"""
188188

@@ -227,12 +227,12 @@ class ConfigurationDetailsFunctionalTest extends Specification {
227227
}
228228
229229
extraJavaModuleInfo {
230-
module("${libs.commonsCli}", "org.apache.commons.cli") {
230+
module(${libs.commonsCli}, "org.apache.commons.cli") {
231231
exports("org.apache.commons.cli")
232232
}
233-
module("${libs.commonsCollections}", "org.apache.commons.collections")
233+
module(${libs.commonsCollections}, "org.apache.commons.collections")
234234
235-
automaticModule("${libs.jsr305}", "jsr305")
235+
automaticModule(${libs.jsr305}, "jsr305")
236236
}
237237
"""
238238

src/test/groovy/org/gradlex/javamodule/moduleinfo/test/EdgeCasesFunctionalTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ class EdgeCasesFunctionalTest extends Specification {
4949
5050
extraJavaModuleInfo {
5151
failOnMissingModuleInfo.set(false)
52-
module("${libs.zookeeper}", "org.apache.zookeeper") {
53-
mergeJar("${libs.zookeeperJute}")
52+
module(${libs.zookeeper}, "org.apache.zookeeper") {
53+
mergeJar(${libs.zookeeperJute})
5454
5555
exports("org.apache.jute")
5656
exports("org.apache.zookeeper")

0 commit comments

Comments
 (0)