Skip to content

Commit 5df1c54

Browse files
authored
Add 'failOnModifiedDerivedModuleNames' option (#189)
1 parent b9b6df6 commit 5df1c54

File tree

6 files changed

+91
-0
lines changed

6 files changed

+91
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Extra Java Module Info Gradle Plugin - Changelog
22

3+
## Version 1.13
4+
* [New] [#189](https://github.com/gradlex-org/extra-java-module-info/issues/189) - Add 'failOnModifiedDerivedModuleNames' option (Thanks to [JabRef](https://github.com/JabRef/jabref) for providing a use case)
5+
36
## Version 1.12
47
* [New] [#174](https://github.com/gradlex-org/extra-java-module-info/pull/174) - Add 'requiresStaticTransitive(...)' to module patch DSL
58
* [New] [#172](https://github.com/gradlex-org/extra-java-module-info/pull/172) - Allow ignoring specific service provider implementations (Thanks [Ihor Herasymenko](https://github.com/iherasymenko) for contributing!)

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ plugins {
6969
extraJavaModuleInfo {
7070
// failOnMissingModuleInfo = false
7171
// failOnAutomaticModules = true
72+
// failOnModifiedDerivedModuleNames = true
7273
// skipLocalJars = true
7374
module("commons-beanutils:commons-beanutils", "org.apache.commons.beanutils") {
7475
exports("org.apache.commons.beanutils")

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ public void apply(Project project) {
7474
ExtraJavaModuleInfoPluginExtension extension = project.getExtensions().create("extraJavaModuleInfo", ExtraJavaModuleInfoPluginExtension.class);
7575
extension.getFailOnMissingModuleInfo().convention(true);
7676
extension.getFailOnAutomaticModules().convention(false);
77+
extension.getFailOnModifiedDerivedModuleNames().convention(false);
7778
extension.getSkipLocalJars().convention(false);
7879
extension.getDeriveAutomaticModuleNamesFromFileNames().convention(false);
7980

@@ -204,6 +205,7 @@ private void registerTransform(String fileExtension, Project project, ExtraJavaM
204205
p.getModuleSpecs().set(extension.getModuleSpecs());
205206
p.getFailOnMissingModuleInfo().set(extension.getFailOnMissingModuleInfo());
206207
p.getFailOnAutomaticModules().set(extension.getFailOnAutomaticModules());
208+
p.getFailOnModifiedDerivedModuleNames().set(extension.getFailOnModifiedDerivedModuleNames());
207209
p.getDeriveAutomaticModuleNamesFromFileNames().set(extension.getDeriveAutomaticModuleNamesFromFileNames());
208210

209211
// See: https://github.com/adammurdoch/dependency-graph-as-task-inputs/blob/main/plugins/src/main/java/TestPlugin.java

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public abstract class ExtraJavaModuleInfoPluginExtension {
4949
public abstract MapProperty<String, ModuleSpec> getModuleSpecs();
5050
public abstract Property<Boolean> getFailOnMissingModuleInfo();
5151
public abstract Property<Boolean> getFailOnAutomaticModules();
52+
public abstract Property<Boolean> getFailOnModifiedDerivedModuleNames();
5253
public abstract Property<Boolean> getSkipLocalJars();
5354
public abstract Property<Boolean> getDeriveAutomaticModuleNamesFromFileNames();
5455
public abstract Property<String> getVersionsProvidingConfiguration();

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ public interface Parameter extends TransformParameters {
101101
@Input
102102
Property<Boolean> getFailOnAutomaticModules();
103103

104+
@Input
105+
Property<Boolean> getFailOnModifiedDerivedModuleNames();
106+
104107
@Input
105108
Property<Boolean> getDeriveAutomaticModuleNamesFromFileNames();
106109

@@ -154,6 +157,12 @@ public void transform(TransformOutputs outputs) {
154157
if (expectedName != null && !definedName.equals(expectedName) && !moduleSpec.overrideModuleName) {
155158
throw new RuntimeException("The name '" + definedName + "' is different than the Automatic-Module-Name '" + expectedName + "'; explicitly allow override via 'overrideModuleName()'");
156159
}
160+
if (parameters.getFailOnModifiedDerivedModuleNames().get() && !realModule && expectedName == null && !moduleSpec.overrideModuleName) {
161+
String expectedAutomaticNameFromFileName = automaticModulNameFromFileName(originalJar);
162+
if (!definedName.equals(expectedAutomaticNameFromFileName)) {
163+
throw new RuntimeException("The name '" + definedName + "' is different than the name derived from the Jar file name '" + expectedAutomaticNameFromFileName + "'; turn off 'failOnModifiedDerivedModuleNames' or explicitly allow override via 'overrideModuleName()'");
164+
}
165+
}
157166
addModuleDescriptor(originalJar, getModuleJar(outputs, originalJar), (ModuleInfo) moduleSpec);
158167
} else if (moduleSpec instanceof AutomaticModuleName) {
159168
if (realModule) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package org.gradlex.javamodule.moduleinfo.test
2+
3+
import org.gradlex.javamodule.moduleinfo.test.fixture.GradleBuild
4+
import spock.lang.Specification
5+
6+
class ForbidDerivedModuleNameChangeFunctionalTest extends Specification {
7+
8+
@Delegate
9+
GradleBuild build = new GradleBuild()
10+
11+
def setup() {
12+
settingsFile << 'rootProject.name = "test-project"'
13+
buildFile << '''
14+
plugins {
15+
id("org.gradlex.extra-java-module-info")
16+
id("java-library")
17+
}
18+
'''
19+
file("src/main/java/module-info.java") << '''
20+
module org.gradle.sample.app {
21+
requires com.vladsch.flexmark.util.misc;
22+
}
23+
'''
24+
}
25+
26+
def "fails for name change if failOnModifiedDerivedModuleNames=true"() {
27+
given:
28+
buildFile << '''
29+
dependencies {
30+
implementation("com.vladsch.flexmark:flexmark-util-misc:0.64.8")
31+
}
32+
extraJavaModuleInfo {
33+
failOnModifiedDerivedModuleNames.set(true)
34+
module("com.vladsch.flexmark:flexmark-util-misc", "com.vladsch.flexmark.util.misc") {}
35+
}
36+
'''
37+
38+
expect:
39+
def result = fail()
40+
result.output.contains("The name 'com.vladsch.flexmark.util.misc' is different than the name derived from the Jar file name 'flexmark.util.misc'; turn off 'failOnModifiedDerivedModuleNames' or explicitly allow override via 'overrideModuleName()'")
41+
}
42+
43+
def "Allows name change if failOnModifiedDerivedModuleNames=fasle (default)"() {
44+
given:
45+
buildFile << '''
46+
dependencies {
47+
implementation("com.vladsch.flexmark:flexmark-util-misc:0.64.8")
48+
}
49+
extraJavaModuleInfo {
50+
module("com.vladsch.flexmark:flexmark-util-misc", "com.vladsch.flexmark.util.misc") {}
51+
}
52+
'''
53+
54+
expect:
55+
build()
56+
}
57+
58+
def "Allows name change via overrideModuleName"() {
59+
given:
60+
buildFile << '''
61+
dependencies {
62+
implementation("com.vladsch.flexmark:flexmark-util-misc:0.64.8")
63+
}
64+
extraJavaModuleInfo {
65+
failOnModifiedDerivedModuleNames.set(true)
66+
module("com.vladsch.flexmark:flexmark-util-misc", "com.vladsch.flexmark.util.misc") {
67+
overrideModuleName()
68+
}
69+
}
70+
'''
71+
72+
expect:
73+
build()
74+
}
75+
}

0 commit comments

Comments
 (0)