Skip to content

Commit 16d198c

Browse files
committed
moduleNamePrefixToGroup mapping uses best fit instead of first match
Fixes #90
1 parent 333b684 commit 16d198c

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

src/main/java/org/gradlex/javamodule/dependencies/JavaModuleDependenciesExtension.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ private Provider<String> mapByPrefix(Provider<String> moduleName) {
183183
return getModuleNamePrefixToGroup().map(
184184
m -> {
185185
Optional<Map.Entry<String, String>> prefixToGroup = m.entrySet().stream()
186-
.filter(e -> moduleName.get().startsWith(e.getKey())).findFirst();
186+
.filter(e -> moduleName.get().startsWith(e.getKey())).max(Comparator.comparingInt(e -> e.getKey().length()));
187187
if (prefixToGroup.isPresent()) {
188188
String group = prefixToGroup.get().getValue();
189189
String artifact = toProjectName(moduleName.get().substring(prefixToGroup.get().getKey().length()));
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.gradlex.javamodule.dependencies.test
2+
3+
import org.gradle.testkit.runner.TaskOutcome
4+
import org.gradlex.javamodule.dependencies.test.fixture.GradleBuild
5+
import spock.lang.Specification
6+
7+
class GroupMappingTest extends Specification {
8+
9+
@Delegate
10+
GradleBuild build = new GradleBuild()
11+
12+
def "can map overlapping groups"() {
13+
given:
14+
def lib2ModuleInfoFile = file("lib-b/src/main/java/module-info.java")
15+
def lib2BuildFile = file("lib-b/build.gradle.kts") << libBuildFile.text
16+
settingsFile << 'include("lib-b")'
17+
18+
libModuleInfoFile << 'module com.lib { }'
19+
libBuildFile << 'group = "com.foo"'
20+
lib2ModuleInfoFile << 'module com.example.lib.b { }'
21+
lib2BuildFile << 'group = "com.example"'
22+
appModuleInfoFile << '''
23+
module org.gradlex.test.app {
24+
requires com.lib;
25+
requires com.example.lib.b;
26+
}
27+
'''
28+
29+
appBuildFile << '''
30+
javaModuleDependencies {
31+
moduleNamePrefixToGroup.put("com.", "com.foo")
32+
moduleNamePrefixToGroup.put("com.example.", "com.example")
33+
}
34+
'''
35+
36+
when:
37+
def result = runner('assemble').build()
38+
39+
then:
40+
result.task(":app:compileJava").outcome == TaskOutcome.SUCCESS
41+
}
42+
43+
}

0 commit comments

Comments
 (0)