Skip to content

Commit e43e0f7

Browse files
committed
Ignore sub-folders in 'META-INF/services'
fixes #45
1 parent afaca8a commit e43e0f7

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Extra Java Module Info Gradle Plugin - Changelog
22

33
## Version 1.4
4+
* [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!)
45
* [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!)
56

67
## Version 1.3

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,17 +239,20 @@ private void copyAndExtractProviders(JarInputStream inputStream, JarOutputStream
239239
while (jarEntry != null) {
240240
byte[] content = readAllBytes(inputStream);
241241
String entryName = jarEntry.getName();
242-
boolean isServiceProviderFile = entryName.startsWith(SERVICES_PREFIX) && !entryName.equals(SERVICES_PREFIX);
243-
if (isServiceProviderFile) {
242+
boolean isFileInServicesFolder = entryName.startsWith(SERVICES_PREFIX) && !entryName.equals(SERVICES_PREFIX);
243+
if (isFileInServicesFolder) {
244244
String key = entryName.substring(SERVICES_PREFIX.length());
245-
if (!providers.containsKey(key)) {
246-
providers.put(key, new ArrayList<>());
245+
boolean isServiceProviderFile = !key.contains("/"); // ignore files in sub-folders
246+
if (isServiceProviderFile) {
247+
if (!providers.containsKey(key)) {
248+
providers.put(key, new ArrayList<>());
249+
}
250+
providers.get(key).addAll(extractImplementations(content));
247251
}
248-
providers.get(key).addAll(extractImplementations(content));
249252
}
250253

251254
if (!JAR_SIGNATURE_PATH.matcher(entryName).matches() && !"META-INF/MANIFEST.MF".equals(jarEntry.getName())) {
252-
if (!willMergeJars || !isServiceProviderFile) { // service provider files will be merged later
255+
if (!willMergeJars || !isFileInServicesFolder) { // service provider files will be merged later
253256
jarEntry.setCompressedSize(-1);
254257
try {
255258
outputStream.putNextEntry(jarEntry);

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,35 @@ abstract class AbstractFunctionalTest extends Specification {
327327
run().task(':run').outcome == TaskOutcome.SUCCESS
328328
}
329329

330+
def "only takes well-defined services from META-INF/services"() {
331+
given:
332+
file("src/main/java/org/gradle/sample/app/Main.java") << """
333+
package org.gradle.sample.app;
334+
335+
public class Main {
336+
public static void main(String[] args) { }
337+
}
338+
"""
339+
file("src/main/java/module-info.java") << """
340+
module org.gradle.sample.app {
341+
requires qpid.jms.client;
342+
}
343+
"""
344+
buildFile << """
345+
dependencies {
346+
implementation("org.apache.qpid:qpid-jms-client:2.2.0")
347+
}
348+
349+
extraJavaModuleInfo {
350+
failOnMissingModuleInfo.set(false)
351+
module("org.apache.qpid:qpid-jms-client", "qpid.jms.client")
352+
}
353+
"""
354+
355+
expect:
356+
run().task(':run').outcome == TaskOutcome.SUCCESS
357+
}
358+
330359
def "can add static/transitive 'requires' modifiers to legacy libraries"() {
331360
given:
332361
file("src/main/java/org/gradle/sample/app/Main.java") << """

0 commit comments

Comments
 (0)