Skip to content

Commit 213d2a1

Browse files
authored
fix: avoid NPE on DefaultDependencyConvention (#127)
1 parent c810021 commit 213d2a1

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultDependencyConvention.java

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,19 @@
1717
import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension;
1818
import org.gradle.api.GradleException;
1919
import org.gradle.api.Project;
20+
import org.gradle.api.artifacts.VersionConstraint;
2021
import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory;
2122
import org.gradle.api.internal.catalog.DefaultVersionCatalog;
23+
import org.gradle.api.internal.catalog.VersionModel;
2224
import org.gradle.api.plugins.JavaPlugin;
2325

26+
import java.util.Optional;
27+
2428
import static java.lang.String.format;
2529
import static org.eclipse.edc.plugins.edcbuild.conventions.ConventionFunctions.requireExtension;
30+
import static org.gradle.api.plugins.JavaPlugin.API_CONFIGURATION_NAME;
31+
import static org.gradle.api.plugins.JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME;
32+
import static org.gradle.api.plugins.JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME;
2633

2734
/**
2835
* Applies default dependencies to all "java-library" projects, i.e. Jackson, the runtime-metamodel, JUnit, Mockito and AssertJ in
@@ -31,35 +38,45 @@
3138
class DefaultDependencyConvention implements EdcConvention {
3239

3340
private static final String EDC_GROUP_ID = "org.eclipse.edc";
41+
private static final String DEFAULT_JETBRAINS_ANNOTATION_VERSION = "24.0.1";
42+
private static final String DEFAULT_JACKSON_VERSION = "2.14.2";
43+
private static final String DEFAULT_METAMODEL_VERSION = "0.0.1-SNAPSHOT";
44+
private static final String DEFAULT_MOCKITO_VERSION = "5.2.0";
45+
private static final String DEFAULT_ASSERTJ_VERSION = "3.23.1";
46+
private static final String DEFAULT_JUPITER_VERSION = "5.9.2";
3447

3548
@Override
3649
public void apply(Project target) {
3750
target.getPluginManager().withPlugin("java-library", plugin -> {
3851

3952
var ext = requireExtension(target, BuildExtension.class).getVersions();
4053
var catalogReader = new CatalogReader(target, ext.getCatalogName());
54+
var d = target.getDependencies();
4155

4256
// classpath dependencies
43-
var d = target.getDependencies();
44-
d.add(JavaPlugin.API_CONFIGURATION_NAME, format("org.jetbrains:annotations:%s", ext.getJetbrainsAnnotation().getOrElse(catalogReader.versionFor("jetbrainsAnnotation", "15.0"))));
45-
var jacksonVersion = ext.getJackson().getOrElse(catalogReader.versionFor("jackson", "2.14.0"));
46-
d.add(JavaPlugin.API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-core:%s", jacksonVersion));
47-
d.add(JavaPlugin.API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-annotations:%s", jacksonVersion));
48-
d.add(JavaPlugin.API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-databind:%s", jacksonVersion));
57+
var jetbrainsAnnotationVersion = ext.getJetbrainsAnnotation().getOrElse(catalogReader.versionFor("jetbrainsAnnotation", DEFAULT_JETBRAINS_ANNOTATION_VERSION));
58+
var jacksonVersion = ext.getJackson().getOrElse(catalogReader.versionFor("jackson", DEFAULT_JACKSON_VERSION));
59+
var metamodelVersion = ext.getMetaModel().getOrElse(DEFAULT_METAMODEL_VERSION);
60+
d.add(API_CONFIGURATION_NAME, format("org.jetbrains:annotations:%s", jetbrainsAnnotationVersion));
61+
d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-core:%s", jacksonVersion));
62+
d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-annotations:%s", jacksonVersion));
63+
d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-databind:%s", jacksonVersion));
4964
// this is a temporary workaround to compensate for azure libs, that use XmlMapper, but don't correctly list it as a dependency
5065
if (hasAzureDependency(target)) {
5166
d.add(JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, format("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:%s", jacksonVersion));
5267
}
53-
d.add(JavaPlugin.API_CONFIGURATION_NAME, format("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:%s", jacksonVersion));
54-
d.add(JavaPlugin.API_CONFIGURATION_NAME, format("%s:runtime-metamodel:%s", EDC_GROUP_ID, ext.getMetaModel().getOrElse("0.0.1-SNAPSHOT")));
68+
d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:%s", jacksonVersion));
69+
d.add(API_CONFIGURATION_NAME, format("%s:runtime-metamodel:%s", EDC_GROUP_ID, metamodelVersion));
5570

5671
//test classpath dependencies
57-
var jupiterVersion = ext.getJupiter().getOrElse(catalogReader.versionFor("jupiter", "5.9.2"));
58-
d.add(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-api:%s", jupiterVersion));
59-
d.add(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-params:%s", jupiterVersion));
60-
d.add(JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-engine:%s", jupiterVersion));
61-
d.add(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.mockito:mockito-core:%s", ext.getMockito().getOrElse(catalogReader.versionFor("mockito", "5.2.0"))));
62-
d.add(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.assertj:assertj-core:%s", ext.getAssertJ().getOrElse(catalogReader.versionFor("assertj", "3.23.1"))));
72+
var jupiterVersion = ext.getJupiter().getOrElse(catalogReader.versionFor("jupiter", DEFAULT_JUPITER_VERSION));
73+
var mockitoVersion = ext.getMockito().getOrElse(catalogReader.versionFor("mockito", DEFAULT_MOCKITO_VERSION));
74+
var assertjVersion = ext.getAssertJ().getOrElse(catalogReader.versionFor("assertj", DEFAULT_ASSERTJ_VERSION));
75+
d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-api:%s", jupiterVersion));
76+
d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-params:%s", jupiterVersion));
77+
d.add(TEST_RUNTIME_ONLY_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-engine:%s", jupiterVersion));
78+
d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.mockito:mockito-core:%s", mockitoVersion));
79+
d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.assertj:assertj-core:%s", assertjVersion));
6380
});
6481
}
6582

@@ -88,8 +105,11 @@ String versionFor(String versionRef, String defaultValue) {
88105
var field = AbstractExternalDependencyFactory.class.getDeclaredField(FIELDNAME_CONFIG);
89106
field.setAccessible(true);
90107
var catalog = (DefaultVersionCatalog) field.get(factory);
91-
var versionModel = catalog.getVersion(versionRef);
92-
return versionModel.getVersion().getRequiredVersion();
108+
return Optional.ofNullable(catalog)
109+
.map(c -> c.getVersion(versionRef))
110+
.map(VersionModel::getVersion)
111+
.map(VersionConstraint::getRequiredVersion)
112+
.orElse(defaultValue);
93113
} catch (IllegalAccessException | NoSuchFieldException e) {
94114
throw new GradleException("error introspecting catalog", e);
95115
}

plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/MavenPublicationConvention.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public void apply(Project target) {
5656
mavenPublication -> {
5757
mavenPublication.from(target.getComponents().getByName("java"));
5858
mavenPublication.setGroupId(buildExt.getPom().getGroupId());
59+
mavenPublication.suppressPomMetadataWarningsFor("testFixturesApiElements");
60+
mavenPublication.suppressPomMetadataWarningsFor("testFixturesRuntimeElements");
5961
}));
6062
}
6163
}

0 commit comments

Comments
 (0)