diff --git a/DEPENDENCIES b/DEPENDENCIES index 28c4322..c007786 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -67,9 +67,9 @@ maven/mavencentral/javax.mail/mailapi/1.4.3, CDDL-1.0 OR GPL-2.0-only WITH Class maven/mavencentral/javax.validation/validation-api/1.1.0.Final, Apache-2.0, approved, CQ15114 maven/mavencentral/javax.validation/validation-api/2.0.0.Final, Apache-2.0, approved, CQ15302 maven/mavencentral/joda-time/joda-time/2.9.7, Apache-2.0, approved, CQ11988 -maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.14.1, Apache-2.0, approved, #7164 -maven/mavencentral/net.bytebuddy/byte-buddy/1.12.10, Apache-2.0 AND BSD-3-Clause, approved, #1811 -maven/mavencentral/net.bytebuddy/byte-buddy/1.14.1, Apache-2.0 AND BSD-3-Clause, approved, #7163 +maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.14.10, Apache-2.0, approved, #7164 +maven/mavencentral/net.bytebuddy/byte-buddy/1.12.21, Apache-2.0 AND BSD-3-Clause, approved, #1811 +maven/mavencentral/net.bytebuddy/byte-buddy/1.14.10, Apache-2.0 AND BSD-3-Clause, approved, #7163 maven/mavencentral/net.sf.jopt-simple/jopt-simple/5.0.3, MIT, approved, CQ13174 maven/mavencentral/net.sf.saxon/Saxon-HE/10.6, MPL-2.0 AND W3C, approved, #7945 maven/mavencentral/net.steppschuh.markdowngenerator/markdowngenerator/1.3.1.1, Apache-2.0, approved, clearlydefined @@ -80,7 +80,7 @@ maven/mavencentral/org.apache.commons/commons-lang3/3.7, Apache-2.0, approved, c maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.2, Apache-2.0, approved, CQ11713 maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.4, Apache-2.0, approved, CQ11716 maven/mavencentral/org.apiguardian/apiguardian-api/1.1.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/org.assertj/assertj-core/3.23.1, Apache-2.0, approved, clearlydefined +maven/mavencentral/org.assertj/assertj-core/3.24.2, Apache-2.0, approved, #6161 maven/mavencentral/org.checkerframework/checker-compat-qual/2.5.2, GPL-2.0-only with Classpath-Exception-2.0, approved, #11598 maven/mavencentral/org.checkerframework/checker-qual/3.12.0, MIT, approved, clearlydefined maven/mavencentral/org.codehaus.mojo/animal-sniffer-annotations/1.17, MIT, approved, clearlydefined @@ -100,16 +100,16 @@ maven/mavencentral/org.jetbrains.kotlin/kotlin-stdlib/1.4.20, Apache-2.0, approv maven/mavencentral/org.jetbrains/annotations/13.0, Apache-2.0, approved, clearlydefined maven/mavencentral/org.jetbrains/annotations/24.0.1, Apache-2.0, approved, #7417 maven/mavencentral/org.jetbrains/annotations/24.1.0, Apache-2.0, approved, clearlydefined -maven/mavencentral/org.junit.jupiter/junit-jupiter-api/5.9.2, EPL-2.0, approved, #3133 -maven/mavencentral/org.junit.jupiter/junit-jupiter-engine/5.9.2, EPL-2.0, approved, #3125 -maven/mavencentral/org.junit.jupiter/junit-jupiter-params/5.9.2, EPL-2.0, approved, #3134 -maven/mavencentral/org.junit.platform/junit-platform-commons/1.9.2, EPL-2.0, approved, #3130 -maven/mavencentral/org.junit.platform/junit-platform-engine/1.9.2, EPL-2.0, approved, #3128 -maven/mavencentral/org.junit/junit-bom/5.9.2, EPL-2.0, approved, #4711 -maven/mavencentral/org.mockito/mockito-core/5.2.0, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #7401 +maven/mavencentral/org.junit.jupiter/junit-jupiter-api/5.10.1, EPL-2.0, approved, #9714 +maven/mavencentral/org.junit.jupiter/junit-jupiter-engine/5.10.1, EPL-2.0, approved, #9711 +maven/mavencentral/org.junit.jupiter/junit-jupiter-params/5.10.1, EPL-2.0, approved, #9708 +maven/mavencentral/org.junit.platform/junit-platform-commons/1.10.1, EPL-2.0, approved, #9715 +maven/mavencentral/org.junit.platform/junit-platform-engine/1.10.1, EPL-2.0, approved, #9709 +maven/mavencentral/org.junit/junit-bom/5.10.1, EPL-2.0, approved, #9844 +maven/mavencentral/org.mockito/mockito-core/5.8.0, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #11787 maven/mavencentral/org.mozilla/rhino/1.7R4, MPL-2.0 AND BSD-3-Clause AND ISC, approved, CQ16320 maven/mavencentral/org.objenesis/objenesis/3.3, Apache-2.0, approved, clearlydefined -maven/mavencentral/org.opentest4j/opentest4j/1.2.0, Apache-2.0, approved, clearlydefined +maven/mavencentral/org.opentest4j/opentest4j/1.3.0, Apache-2.0, approved, #9713 maven/mavencentral/org.ow2.asm/asm-analysis/9.2, BSD-3-Clause, approved, clearlydefined maven/mavencentral/org.ow2.asm/asm-commons/9.2, BSD-3-Clause, approved, clearlydefined maven/mavencentral/org.ow2.asm/asm-tree/9.2, BSD-3-Clause, approved, clearlydefined diff --git a/build.gradle.kts b/build.gradle.kts index af4cd90..bc61e17 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,5 @@ +import java.nio.file.Paths + plugins { // Apply the Java Gradle plugin development plugin to add support for developing Gradle plugins checkstyle diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 702140e..6053e97 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,3 +1,5 @@ +import java.nio.file.Files + plugins { `java-gradle-plugin` } @@ -39,10 +41,13 @@ gradlePlugin { } } +val generatedSourcesFolder = buildDir.resolve("generated").resolve("sources"); + sourceSets { main { java { srcDirs( + generatedSourcesFolder, "../plugins/autodoc/autodoc-plugin/src/main", "../plugins/autodoc/autodoc-converters/src/main", "../plugins/edc-build/src/main", @@ -53,3 +58,30 @@ sourceSets { } } } + +val createVersions = tasks.register("createVersions") { + val folder = generatedSourcesFolder.resolve("java") + .resolve("org").resolve("eclipse").resolve("edc").resolve("plugins") + .resolve("edcbuild") + folder.mkdirs() + + versionCatalogs.find("libs") + .ifPresent { catalog -> + val head = "package org.eclipse.edc.plugins.edcbuild;\npublic interface Versions {\n" + val tail = "\n}"; + + val constants = listOf("jupiter", "mockito", "assertj") + .mapNotNull { name -> + catalog.findVersion(name) + .map { version -> " String %s = \"%s\";".format(name.toUpperCase(), version) } + .orElse(null) + } + .joinToString("\n", head, tail) + + Files.writeString(folder.resolve("Versions.java").toPath(), constants) + } +} + +tasks.compileJava { + dependsOn(createVersions) +} diff --git a/docs/developer/README.md b/docs/developer/README.md index 4796167..4e9e589 100644 --- a/docs/developer/README.md +++ b/docs/developer/README.md @@ -1 +1,3 @@ # Developer Documentation + +- [Autodoc](autodoc.md) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5337423..c90aac4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,11 +2,15 @@ format.version = "1.1" [versions] +assertj = "3.24.2" edc = "0.4.2-SNAPSHOT" jackson = "2.16.0" jetbrainsAnnotation = "24.0.1" +jupiter = "5.10.1" +mockito = "5.8.0" [libraries] +assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" } edc-runtime-metamodel = { module = "org.eclipse.edc:runtime-metamodel", version.ref = "edc" } jackson-annotations = { module = "com.fasterxml.jackson.core:jackson-annotations", version.ref = "jackson" } jackson-core = { module = "com.fasterxml.jackson.core:jackson-core", version.ref = "jackson" } @@ -14,6 +18,8 @@ jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", ver jackson-dataformat-xml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-xml", version.ref = "jackson" } jackson-datatypeJsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", version.ref = "jackson" } jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrainsAnnotation" } +jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "jupiter" } +mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } plugin-checksum = { module = "gradle.plugin.org.gradle.crypto:checksum", version = "1.4.0" } plugin-nexus-publish = { module = "io.github.gradle-nexus:publish-plugin", version = "1.3.0" } plugin-openapi-merger = { module = "com.rameshkp:openapi-merger-gradle-plugin", version = "1.0.5" } diff --git a/plugins/edc-build/build.gradle.kts b/plugins/edc-build/build.gradle.kts index ad1b466..75012c7 100644 --- a/plugins/edc-build/build.gradle.kts +++ b/plugins/edc-build/build.gradle.kts @@ -45,3 +45,11 @@ gradlePlugin { } } } + +sourceSets { + main { + java { + srcDir(rootDir.resolve("buildSrc").resolve("build").resolve("generated").resolve("sources")) + } + } +} diff --git a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/Conventions.java b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/Conventions.java index b24a133..a3fc9fb 100644 --- a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/Conventions.java +++ b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/Conventions.java @@ -37,7 +37,7 @@ public static EdcConvention repositories() { } public static EdcConvention defaultDependencies() { - return new DefaultDependencyConvention(); + return new DefaultTestDependencyConvention(); } public static EdcConvention mavenPom() { diff --git a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultDependencyConvention.java b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultDependencyConvention.java deleted file mode 100644 index fc15911..0000000 --- a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultDependencyConvention.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2022 Microsoft Corporation - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - * - * Contributors: - * Microsoft Corporation - initial API and implementation - * - */ - -package org.eclipse.edc.plugins.edcbuild.conventions; - -import org.eclipse.edc.plugins.edcbuild.extensions.BuildExtension; -import org.gradle.api.GradleException; -import org.gradle.api.Project; -import org.gradle.api.artifacts.VersionConstraint; -import org.gradle.api.internal.catalog.AbstractExternalDependencyFactory; -import org.gradle.api.internal.catalog.DefaultVersionCatalog; -import org.gradle.api.internal.catalog.VersionModel; -import org.gradle.api.plugins.JavaPlugin; - -import java.util.Optional; - -import static java.lang.String.format; -import static org.eclipse.edc.plugins.edcbuild.conventions.ConventionFunctions.requireExtension; -import static org.gradle.api.plugins.JavaPlugin.API_CONFIGURATION_NAME; -import static org.gradle.api.plugins.JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME; -import static org.gradle.api.plugins.JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME; - -/** - * Applies default dependencies to all "java-library" projects, i.e. Jackson, the runtime-metamodel, JUnit, Mockito and AssertJ in - * their respective configurations. - */ -class DefaultDependencyConvention implements EdcConvention { - - private static final String EDC_GROUP_ID = "org.eclipse.edc"; - private static final String DEFAULT_JETBRAINS_ANNOTATION_VERSION = "24.0.1"; - private static final String DEFAULT_JACKSON_VERSION = "2.14.2"; - private static final String DEFAULT_METAMODEL_VERSION = "0.4.2-SNAPSHOT"; - private static final String DEFAULT_MOCKITO_VERSION = "5.2.0"; - private static final String DEFAULT_ASSERTJ_VERSION = "3.23.1"; - private static final String DEFAULT_JUPITER_VERSION = "5.9.2"; - - @Override - public void apply(Project target) { - target.getPluginManager().withPlugin("java-library", plugin -> { - - var ext = requireExtension(target, BuildExtension.class).getVersions(); - var catalogReader = new CatalogReader(target, ext.getCatalogName()); - var d = target.getDependencies(); - - // classpath dependencies - var jetbrainsAnnotationVersion = ext.getJetbrainsAnnotation().getOrElse(catalogReader.versionFor("jetbrainsAnnotation", DEFAULT_JETBRAINS_ANNOTATION_VERSION)); - var jacksonVersion = ext.getJackson().getOrElse(catalogReader.versionFor("jackson", DEFAULT_JACKSON_VERSION)); - var metamodelVersion = ext.getMetaModel().getOrElse(DEFAULT_METAMODEL_VERSION); - d.add(API_CONFIGURATION_NAME, format("org.jetbrains:annotations:%s", jetbrainsAnnotationVersion)); - d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-core:%s", jacksonVersion)); - d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-annotations:%s", jacksonVersion)); - d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.core:jackson-databind:%s", jacksonVersion)); - // this is a temporary workaround to compensate for azure libs, that use XmlMapper, but don't correctly list it as a dependency - if (hasAzureDependency(target)) { - d.add(JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, format("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:%s", jacksonVersion)); - } - d.add(API_CONFIGURATION_NAME, format("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:%s", jacksonVersion)); - d.add(API_CONFIGURATION_NAME, format("%s:runtime-metamodel:%s", EDC_GROUP_ID, metamodelVersion)); - - //test classpath dependencies - var jupiterVersion = ext.getJupiter().getOrElse(catalogReader.versionFor("jupiter", DEFAULT_JUPITER_VERSION)); - var mockitoVersion = ext.getMockito().getOrElse(catalogReader.versionFor("mockito", DEFAULT_MOCKITO_VERSION)); - var assertjVersion = ext.getAssertJ().getOrElse(catalogReader.versionFor("assertj", DEFAULT_ASSERTJ_VERSION)); - d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-api:%s", jupiterVersion)); - d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-params:%s", jupiterVersion)); - d.add(TEST_RUNTIME_ONLY_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-engine:%s", jupiterVersion)); - d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.mockito:mockito-core:%s", mockitoVersion)); - d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.assertj:assertj-core:%s", assertjVersion)); - }); - } - - private boolean hasAzureDependency(Project target) { - return target.getConfigurations().stream().flatMap(c -> c.getDependencies().stream()) - .anyMatch(d -> d.getGroup() != null && d.getGroup().contains("azure")); - } - - private static class CatalogReader { - private static final String FIELDNAME_CONFIG = "config"; - private final Project target; - private final String catalogName; - - CatalogReader(Project target, String catalogName) { - this.target = target; - this.catalogName = catalogName; - } - - String versionFor(String versionRef, String defaultValue) { - var factory = target.getExtensions().findByName(catalogName); - if (factory == null) { - target.getLogger().debug("No VersionCatalog with name {} found. Please either override the version for {} in your build script, or instantiate the version catalog in your client project.", catalogName, versionRef); - return defaultValue; - } - try { - var field = AbstractExternalDependencyFactory.class.getDeclaredField(FIELDNAME_CONFIG); - field.setAccessible(true); - var catalog = (DefaultVersionCatalog) field.get(factory); - return Optional.ofNullable(catalog) - .map(c -> c.getVersion(versionRef)) - .map(VersionModel::getVersion) - .map(VersionConstraint::getRequiredVersion) - .orElse(defaultValue); - } catch (IllegalAccessException | NoSuchFieldException e) { - throw new GradleException("error introspecting catalog", e); - } - } - } -} diff --git a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultTestDependencyConvention.java b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultTestDependencyConvention.java new file mode 100644 index 0000000..ca2a7da --- /dev/null +++ b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/DefaultTestDependencyConvention.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 Microsoft Corporation + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Microsoft Corporation - initial API and implementation + * + */ + +package org.eclipse.edc.plugins.edcbuild.conventions; + +import org.eclipse.edc.plugins.edcbuild.Versions; +import org.gradle.api.Project; + +import static java.lang.String.format; +import static org.gradle.api.plugins.JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME; +import static org.gradle.api.plugins.JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME; + +/** + * Applies default test dependencies to all "java-library" projects: JUnit, Mockito and AssertJ in their respective + * configurations. + */ +class DefaultTestDependencyConvention implements EdcConvention { + + @Override + public void apply(Project target) { + target.getPluginManager().withPlugin("java-library", plugin -> { + + var d = target.getDependencies(); + + //test classpath dependencies + d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-api:%s", Versions.JUPITER)); + d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-params:%s", Versions.JUPITER)); + d.add(TEST_RUNTIME_ONLY_CONFIGURATION_NAME, format("org.junit.jupiter:junit-jupiter-engine:%s", Versions.JUPITER)); + d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.mockito:mockito-core:%s", Versions.MOCKITO)); + d.add(TEST_IMPLEMENTATION_CONFIGURATION_NAME, format("org.assertj:assertj-core:%s", Versions.ASSERTJ)); + }); + } + +}