Skip to content

Commit 3c9b4de

Browse files
committed
Declare dependencies for dependent modules in case of of local SDK
1 parent 59f1e8f commit 3c9b4de

File tree

3 files changed

+41
-25
lines changed

3 files changed

+41
-25
lines changed

src/main/java/org/openjfx/gradle/JavaFXModule.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,22 @@
4242
public enum JavaFXModule {
4343

4444
BASE,
45-
GRAPHICS,
46-
CONTROLS,
47-
FXML,
48-
MEDIA,
49-
SWING,
50-
WEB;
45+
GRAPHICS(BASE),
46+
CONTROLS(BASE, GRAPHICS),
47+
FXML(BASE, GRAPHICS),
48+
MEDIA(BASE, GRAPHICS),
49+
SWING(BASE, GRAPHICS),
50+
WEB(BASE, CONTROLS, GRAPHICS, MEDIA);
5151

5252
static final String PREFIX_MODULE = "javafx.";
5353
private static final String PREFIX_ARTIFACT = "javafx-";
5454

55+
private final List<JavaFXModule> dependentModules;
56+
57+
JavaFXModule(JavaFXModule...dependentModules) {
58+
this.dependentModules = List.of(dependentModules);
59+
}
60+
5561
public static Optional<JavaFXModule> fromModuleName(String moduleName) {
5662
return Stream.of(JavaFXModule.values())
5763
.filter(javaFXModule -> moduleName.equals(javaFXModule.getModuleName()))
@@ -93,4 +99,8 @@ public static void validateModules(List<String> moduleNames) {
9399
throw new GradleException("Found one or more invalid JavaFX module names: " + invalidModules);
94100
}
95101
}
102+
103+
public List<JavaFXModule> getDependentModules() {
104+
return dependentModules;
105+
}
96106
}

src/main/java/org/openjfx/gradle/JavaFXOptions.java

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@
4343
import javax.inject.Inject;
4444
import java.io.File;
4545
import java.util.ArrayList;
46-
import java.util.Collections;
4746
import java.util.HashMap;
4847
import java.util.HashSet;
4948
import java.util.List;
5049
import java.util.Map;
5150
import java.util.Set;
51+
import java.util.stream.Stream;
5252

5353
abstract public class JavaFXOptions {
5454

@@ -185,23 +185,29 @@ private void declareFXDependencies(String conf) {
185185
// This allows users to make multiple modifications to the 'configurations' list at arbitrary times during
186186
// build configuration.
187187
getConfigurationContainer().getByName(conf).withDependencies(dependencySet -> {
188-
if (!List.of(configurations).contains(conf)) {
189-
// configuration was removed: do nothing
190-
return;
191-
}
192-
JavaFXModule.getJavaFXModules(this.modules).stream()
193-
.sorted()
194-
.forEach(javaFXModule -> {
195-
if (customSDKArtifactRepository != null) {
196-
dependencySet.add(getDependencies().create(Map.of("name", javaFXModule.getModuleName())));
197-
} else {
198-
dependencySet.add(getDependencies().create(
199-
MAVEN_JAVAFX_ARTIFACT_GROUP_ID + ":"
200-
+ javaFXModule.getArtifactName() + ":"
201-
+ getVersion()
202-
));
203-
}
204-
});
188+
if (!List.of(configurations).contains(conf)) {
189+
// configuration was removed: do nothing
190+
return;
191+
}
192+
193+
var javaFXModules = JavaFXModule.getJavaFXModules(this.modules);
194+
if (customSDKArtifactRepository == null) {
195+
javaFXModules.stream().sorted().forEach(javaFXModule -> dependencySet.add(getDependencies().create(
196+
MAVEN_JAVAFX_ARTIFACT_GROUP_ID + ":" + javaFXModule.getArtifactName() + ":" + getVersion()
197+
)));
198+
} else {
199+
// Use the list of dependencies of each module to also add direct dependencies for those.
200+
// This is needed, because there is no information about transitive dependencies in the metadata
201+
// of the modules (as there is no such metadata in the local sdk).
202+
var javaFXModulesWithTransitives = Stream.concat(
203+
javaFXModules.stream(),
204+
javaFXModules.stream().flatMap(m -> m.getDependentModules().stream())
205+
).distinct().sorted();
206+
207+
javaFXModulesWithTransitives.forEach(javaFXModule -> dependencySet.add(getDependencies().create(
208+
Map.of("name", javaFXModule.getModuleName())
209+
)));
210+
}
205211
});
206212
}
207213

test-project/local-sdk/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ application {
1212
}
1313

1414
javafx {
15-
modules = ['javafx.controls', 'javafx.base', 'javafx.graphics']
15+
modules = ['javafx.controls']
1616
sdk = "javafx-sdk-17.0.8"
1717
}

0 commit comments

Comments
 (0)