|
17 | 17 | import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension; |
18 | 18 | import org.gradle.api.GradleException; |
19 | 19 | import org.gradle.api.Project; |
| 20 | +import org.gradle.api.artifacts.VersionConstraint; |
20 | 21 | import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory; |
21 | 22 | import org.gradle.api.internal.catalog.DefaultVersionCatalog; |
| 23 | +import org.gradle.api.internal.catalog.VersionModel; |
22 | 24 | import org.gradle.api.plugins.JavaPlugin; |
23 | 25 |
|
| 26 | +import java.util.Optional; |
| 27 | + |
24 | 28 | import static java.lang.String.format; |
25 | 29 | 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; |
26 | 33 |
|
27 | 34 | /** |
28 | 35 | * Applies default dependencies to all "java-library" projects, i.e. Jackson, the runtime-metamodel, JUnit, Mockito and AssertJ in |
|
31 | 38 | class DefaultDependencyConvention implements EdcConvention { |
32 | 39 |
|
33 | 40 | 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"; |
34 | 47 |
|
35 | 48 | @Override |
36 | 49 | public void apply(Project target) { |
37 | 50 | target.getPluginManager().withPlugin("java-library", plugin -> { |
38 | 51 |
|
39 | 52 | var ext = requireExtension(target, BuildExtension.class).getVersions(); |
40 | 53 | var catalogReader = new CatalogReader(target, ext.getCatalogName()); |
| 54 | + var d = target.getDependencies(); |
41 | 55 |
|
42 | 56 | // 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)); |
49 | 64 | // this is a temporary workaround to compensate for azure libs, that use XmlMapper, but don't correctly list it as a dependency |
50 | 65 | if (hasAzureDependency(target)) { |
51 | 66 | d.add(JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, format("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:%s", jacksonVersion)); |
52 | 67 | } |
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)); |
55 | 70 |
|
56 | 71 | //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)); |
63 | 80 | }); |
64 | 81 | } |
65 | 82 |
|
@@ -88,8 +105,11 @@ String versionFor(String versionRef, String defaultValue) { |
88 | 105 | var field = AbstractExternalDependencyFactory.class.getDeclaredField(FIELDNAME_CONFIG); |
89 | 106 | field.setAccessible(true); |
90 | 107 | 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); |
93 | 113 | } catch (IllegalAccessException | NoSuchFieldException e) { |
94 | 114 | throw new GradleException("error introspecting catalog", e); |
95 | 115 | } |
|
0 commit comments