From 1f801a35f04218b08e0a37ca7a1bce27623967d0 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 30 Mar 2025 20:05:27 +0200 Subject: [PATCH 01/12] =?UTF-8?q?upgrade=20ASM=20(9.7.1=20=E2=86=92=209.8)?= =?UTF-8?q?=20to=20support=20Java=2025's=20class=20file=20major=20version?= =?UTF-8?q?=2069?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Manfred Hanke --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 28f989234f..c0920b0ba1 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,7 @@ ext { googleRelocationPackage = "${thirdPartyRelocationPackage}.com.google" dependency = [ - asm : [group: 'org.ow2.asm', name: 'asm', version: '9.7.1'], + asm : [group: 'org.ow2.asm', name: 'asm', version: '9.8'], guava : [group: 'com.google.guava', name: 'guava', version: '33.3.1-jre'], addGuava : { dependencyHandler -> dependencyHandler(dependency.guava) { From 1ea6489d4ece3d38cbcdc7cbbc3192ade7c8d0cf Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 30 Mar 2025 21:20:57 +0200 Subject: [PATCH 02/12] =?UTF-8?q?upgrade=20Guava=20(33.3.1-jre=20=E2=86=92?= =?UTF-8?q?=2033.4.8-jre)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/google/guava/releases/tag/v33.4.4 has - removed the dependency on JSR-305 [https://github.com/google/guava/commit/04bf0300b8736ec7297a34da40a6efb21231c5da] - migrated from Checker Framework annotations to (JSpecify)[https://jspecify.dev/] annotations [https://github.com/google/guava/commit/2cc8c5eddb587db3ac12dacdd5563e79a4681ec4] - removed the dependency on Checker Framework annotations [https://github.com/google/guava/commit/800b3d42bd124519eac2604b1c4800d523d6065a] compare - https://repo1.maven.org/maven2/com/google/guava/guava/33.3.1-jre/guava-33.3.1-jre.pom - https://repo1.maven.org/maven2/com/google/guava/guava/33.4.8-jre/guava-33.4.8-jre.pom Signed-off-by: Manfred Hanke --- build.gradle | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index c0920b0ba1..c9afc71d36 100644 --- a/build.gradle +++ b/build.gradle @@ -36,12 +36,11 @@ ext { dependency = [ asm : [group: 'org.ow2.asm', name: 'asm', version: '9.8'], - guava : [group: 'com.google.guava', name: 'guava', version: '33.3.1-jre'], + guava : [group: 'com.google.guava', name: 'guava', version: '33.4.8-jre'], addGuava : { dependencyHandler -> dependencyHandler(dependency.guava) { exclude module: 'listenablefuture' - exclude module: 'jsr305' - exclude module: 'checker-qual' + exclude module: 'jspecify' exclude module: 'error_prone_annotations' exclude module: 'j2objc-annotations' } From e34ce8524cad500327e0ac0ec61f4368d7b40864 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 30 Mar 2025 21:25:46 +0200 Subject: [PATCH 03/12] =?UTF-8?q?upgrade=20slf4j=20(2.0.16=20=E2=86=92=202?= =?UTF-8?q?.0.17)=20and=20test=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * org.apache.logging.log4j:log4j-{api,core,slf4j2-impl} 2.24.1 → 2.24.3 * org.assertj:assertj-{core,guava} 3.26.3 → 3.27.3 Signed-off-by: Manfred Hanke --- build.gradle | 12 ++++++------ .../src/main/resources/release_check/archunit.pom | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index c9afc71d36..124c04cd58 100644 --- a/build.gradle +++ b/build.gradle @@ -45,10 +45,10 @@ ext { exclude module: 'j2objc-annotations' } }, - slf4j : [group: 'org.slf4j', name: 'slf4j-api', version: '2.0.16'], - log4j_api : [group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.24.1'], - log4j_core : [group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.24.1'], - log4j_slf4j : [group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.24.1'], + slf4j : [group: 'org.slf4j', name: 'slf4j-api', version: '2.0.17'], + log4j_api : [group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.24.3'], + log4j_core : [group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.24.3'], + log4j_slf4j : [group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.24.3'], junit4 : [group: 'junit', name: 'junit', version: '4.13.2'], junit5JupiterApi : [group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.2'], @@ -61,8 +61,8 @@ ext { junit_dataprovider : [group: 'com.tngtech.java', name: 'junit-dataprovider', version: '1.11.0'], mockito : [group: 'org.mockito', name: 'mockito-core', version: '4.11.0'], // mockito 5 requires Java 11 mockito_junit5 : [group: 'org.mockito', name: 'mockito-junit-jupiter', version: '4.6.1'], - assertj : [group: 'org.assertj', name: 'assertj-core', version: '3.26.3'], - assertj_guava : [group: 'org.assertj', name: 'assertj-guava', version: '3.26.3'], + assertj : [group: 'org.assertj', name: 'assertj-core', version: '3.27.3'], + assertj_guava : [group: 'org.assertj', name: 'assertj-guava', version: '3.27.3'], // Dependencies for example projects / tests javaxAnnotationApi : [group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'], diff --git a/buildSrc/src/main/resources/release_check/archunit.pom b/buildSrc/src/main/resources/release_check/archunit.pom index b1d97bce2c..f3934c7a8a 100644 --- a/buildSrc/src/main/resources/release_check/archunit.pom +++ b/buildSrc/src/main/resources/release_check/archunit.pom @@ -50,7 +50,7 @@ org.slf4j slf4j-api - 2.0.16 + 2.0.17 compile From df96dfdd0760246f1d09cc7707a1ce1a47c59603 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Mon, 31 Mar 2025 08:09:30 +0200 Subject: [PATCH 04/12] simplify JUnit dependencies junit-jupiter = junit-jupiter-api + junit-jupiter-params + junit-jupiter-engine (runtime) Signed-off-by: Manfred Hanke --- build.gradle | 3 +-- .../src/main/groovy/archunit.java-testing-conventions.gradle | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 124c04cd58..9a3b56f133 100644 --- a/build.gradle +++ b/build.gradle @@ -51,8 +51,7 @@ ext { log4j_slf4j : [group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.24.3'], junit4 : [group: 'junit', name: 'junit', version: '4.13.2'], - junit5JupiterApi : [group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.11.2'], - junit5JupiterEngine : [group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.11.2'], + junit5Jupiter : [group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.11.2'], junit5VintageEngine : [group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.11.2'], junitPlatform : [group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.2'], junitPlatformCommons: [group: 'org.junit.platform', name: 'junit-platform-commons', version: '1.11.2'], diff --git a/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle b/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle index 562f0ee7ed..e3a8319ff1 100644 --- a/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle +++ b/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle @@ -9,9 +9,8 @@ abstract class ArchUnitTestExtension { ext.archUnitTest = extensions.create('archUnitTest', ArchUnitTestExtension) dependencies { - testImplementation dependency.junit5JupiterApi + testImplementation dependency.junit5Jupiter - testRuntimeOnly dependency.junit5JupiterEngine testRuntimeOnly dependency.junit5VintageEngine testRuntimeOnly dependency.log4j_slf4j } From 70cab885c1265bda20669f2b951aad152b03f52e Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 30 Mar 2025 22:59:58 +0200 Subject: [PATCH 05/12] =?UTF-8?q?upgrade=20JUnit=20(5.11.2=20=E2=86=92=205?= =?UTF-8?q?.12.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without the `junit-platform-launcher` dependency, test execution in `archunit-3rd-party-test` fails with ``` Caused by: org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests at app//org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:160) at app//org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverSafely(EngineDiscoveryOrchestrator.java:134) at app//org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:108) at app//org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:80) at app//org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:110) at app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at app//org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ... 16 more Caused by: org.junit.platform.commons.JUnitException: OutputDirectoryProvider not available; probably due to unaligned versions of the junit-platform-engine and junit-platform-launcher jars on the classpath/module path. at app//org.junit.platform.engine.EngineDiscoveryRequest.getOutputDirectoryProvider(EngineDiscoveryRequest.java:94) at app//org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:67) at app//org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:152) ... 26 more ``` Signed-off-by: Manfred Hanke --- build.gradle | 59 ++++++++++--------- .../archunit.java-testing-conventions.gradle | 1 + .../archunit-junit5-engine-api.pom | 2 +- 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index 9a3b56f133..42ff02185d 100644 --- a/build.gradle +++ b/build.gradle @@ -35,9 +35,9 @@ ext { googleRelocationPackage = "${thirdPartyRelocationPackage}.com.google" dependency = [ - asm : [group: 'org.ow2.asm', name: 'asm', version: '9.8'], - guava : [group: 'com.google.guava', name: 'guava', version: '33.4.8-jre'], - addGuava : { dependencyHandler -> + asm : [group: 'org.ow2.asm', name: 'asm', version: '9.8'], + guava : [group: 'com.google.guava', name: 'guava', version: '33.4.8-jre'], + addGuava : { dependencyHandler -> dependencyHandler(dependency.guava) { exclude module: 'listenablefuture' exclude module: 'jspecify' @@ -45,36 +45,37 @@ ext { exclude module: 'j2objc-annotations' } }, - slf4j : [group: 'org.slf4j', name: 'slf4j-api', version: '2.0.17'], - log4j_api : [group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.24.3'], - log4j_core : [group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.24.3'], - log4j_slf4j : [group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.24.3'], + slf4j : [group: 'org.slf4j', name: 'slf4j-api', version: '2.0.17'], + log4j_api : [group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.24.3'], + log4j_core : [group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.24.3'], + log4j_slf4j : [group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.24.3'], - junit4 : [group: 'junit', name: 'junit', version: '4.13.2'], - junit5Jupiter : [group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.11.2'], - junit5VintageEngine : [group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.11.2'], - junitPlatform : [group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.11.2'], - junitPlatformCommons: [group: 'org.junit.platform', name: 'junit-platform-commons', version: '1.11.2'], - junitPlatformEngine : [group: 'org.junit.platform', name: 'junit-platform-engine', version: '1.11.2'], - hamcrest : [group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'], - junit_dataprovider : [group: 'com.tngtech.java', name: 'junit-dataprovider', version: '1.11.0'], - mockito : [group: 'org.mockito', name: 'mockito-core', version: '4.11.0'], // mockito 5 requires Java 11 - mockito_junit5 : [group: 'org.mockito', name: 'mockito-junit-jupiter', version: '4.6.1'], - assertj : [group: 'org.assertj', name: 'assertj-core', version: '3.27.3'], - assertj_guava : [group: 'org.assertj', name: 'assertj-guava', version: '3.27.3'], + junit4 : [group: 'junit', name: 'junit', version: '4.13.2'], + junit5Jupiter : [group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.12.2'], + junit5VintageEngine : [group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.12.2'], + junitPlatform : [group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.12.2'], + junitPlatformCommons : [group: 'org.junit.platform', name: 'junit-platform-commons', version: '1.12.2'], + junitPlatformEngine : [group: 'org.junit.platform', name: 'junit-platform-engine', version: '1.12.2'], + junitPlatformLauncher: [group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.12.2'], + hamcrest : [group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'], + junit_dataprovider : [group: 'com.tngtech.java', name: 'junit-dataprovider', version: '1.11.0'], + mockito : [group: 'org.mockito', name: 'mockito-core', version: '4.11.0'], // mockito 5 requires Java 11 + mockito_junit5 : [group: 'org.mockito', name: 'mockito-junit-jupiter', version: '4.6.1'], + assertj : [group: 'org.assertj', name: 'assertj-core', version: '3.27.3'], + assertj_guava : [group: 'org.assertj', name: 'assertj-guava', version: '3.27.3'], // Dependencies for example projects / tests - javaxAnnotationApi : [group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'], - springBeans : [group: 'org.springframework', name: 'spring-beans', version: '5.3.23'], - springBootLoader : [group: 'org.springframework.boot', name: 'spring-boot-loader', version: '2.7.13'], - jakartaInject : [group: 'jakarta.inject', name: 'jakarta.inject-api', version: '2.0.1'], - jakartaAnnotations : [group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: '2.1.1'], - guice : [group: 'com.google.inject', name: 'guice', version: '5.1.0'], + javaxAnnotationApi : [group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'], + springBeans : [group: 'org.springframework', name: 'spring-beans', version: '5.3.23'], + springBootLoader : [group: 'org.springframework.boot', name: 'spring-boot-loader', version: '2.7.13'], + jakartaInject : [group: 'jakarta.inject', name: 'jakarta.inject-api', version: '2.0.1'], + jakartaAnnotations : [group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: '2.1.1'], + guice : [group: 'com.google.inject', name: 'guice', version: '5.1.0'], // NOTE: The pure javaee-api dependencies are crippled, so to run any test we need to choose a full implementation provider - geronimoEjb : [group: 'org.apache.geronimo.specs', name: 'geronimo-ejb_3.1_spec', version: '1.0.2'], - geronimoJpa : [group: 'org.apache.geronimo.specs', name: 'geronimo-jpa_2.0_spec', version: '1.1'], - jodaTime : [group: 'joda-time', name: 'joda-time', version: '2.12.7'], - joox : [group: 'org.jooq', name: 'joox-java-6', version: '1.6.0'] + geronimoEjb : [group: 'org.apache.geronimo.specs', name: 'geronimo-ejb_3.1_spec', version: '1.0.2'], + geronimoJpa : [group: 'org.apache.geronimo.specs', name: 'geronimo-jpa_2.0_spec', version: '1.1'], + jodaTime : [group: 'joda-time', name: 'joda-time', version: '2.12.7'], + joox : [group: 'org.jooq', name: 'joox-java-6', version: '1.6.0'] ] minSupportedJavaVersion = JavaVersion.VERSION_1_8 diff --git a/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle b/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle index e3a8319ff1..fc1ed312d2 100644 --- a/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle +++ b/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle @@ -12,6 +12,7 @@ dependencies { testImplementation dependency.junit5Jupiter testRuntimeOnly dependency.junit5VintageEngine + testRuntimeOnly dependency.junitPlatformLauncher testRuntimeOnly dependency.log4j_slf4j } diff --git a/buildSrc/src/main/resources/release_check/archunit-junit5-engine-api.pom b/buildSrc/src/main/resources/release_check/archunit-junit5-engine-api.pom index 30f57e3b93..0cf590cb89 100644 --- a/buildSrc/src/main/resources/release_check/archunit-junit5-engine-api.pom +++ b/buildSrc/src/main/resources/release_check/archunit-junit5-engine-api.pom @@ -46,7 +46,7 @@ org.junit.platform junit-platform-engine - 1.11.2 + 1.12.2 compile From 01941827492e0e02055d21a4f2ce919a8e296d3e Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sat, 12 Apr 2025 22:18:46 +0200 Subject: [PATCH 06/12] Ignore sun packages when importing full classpath resolves #1446 The CI build has recently often failed on `ubuntu` and `macos` with Java 8, due to `java.lang.OutOfMemoryError: GC overhead limit exceeded`. This is due to `ClassFileImporterSlowTest` importing the full classpath in some tests, which gives more than 20k classes on Java 8, which contains 7k classes in `com.sun` and 4k classes in `sun` packages that can easily be ignored. Signed-off-by: Manfred Hanke --- .../core/importer/ClassFileImporterSlowTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/archunit/src/test/java/com/tngtech/archunit/core/importer/ClassFileImporterSlowTest.java b/archunit/src/test/java/com/tngtech/archunit/core/importer/ClassFileImporterSlowTest.java index c449bc3b01..e2df9af475 100644 --- a/archunit/src/test/java/com/tngtech/archunit/core/importer/ClassFileImporterSlowTest.java +++ b/archunit/src/test/java/com/tngtech/archunit/core/importer/ClassFileImporterSlowTest.java @@ -35,6 +35,13 @@ @Category(Slow.class) public class ClassFileImporterSlowTest { + /** + * Importing the full classpath may give thousands of classes in {@link sun} and (especially for Java 8) {@link com.sun} packages. + * Importing those would increase the memory footprint of the test tremendously, but not give an additional benefit for the test, + * so they are excluded for convenience. + */ + private static final ImportOption EXCLUDE_SUN_PACKAGES = l -> !l.contains("/sun/"); + @Rule public final TransientCopyRule copyRule = new TransientCopyRule(); @Rule @@ -53,6 +60,7 @@ public void imports_the_classpath_without_archives() { assertThatTypes(classes).doNotContain(File.class); // Default does not import JDK classes classes = new ClassFileImporter() + .withImportOption(EXCLUDE_SUN_PACKAGES) .withImportOption(importJavaBaseOrRtAndJUnitJarAndFilesOnTheClasspath()) .importClasspath(); @@ -73,10 +81,12 @@ public void imports_the_classpath_using_multiple_ImportOptions() { @Test public void importing_the_default_package_equals_importing_the_classpath() { Set classNamesOfDefaultPackageImport = new ClassFileImporter() + .withImportOption(EXCLUDE_SUN_PACKAGES) .withImportOption(importJavaBaseOrRtAndJUnitJarAndFilesOnTheClasspath()) .importPackages("") .stream().map(JavaClass::getName).collect(toSet()); Set classNamesOfClasspathImport = new ClassFileImporter() + .withImportOption(EXCLUDE_SUN_PACKAGES) .withImportOption(importJavaBaseOrRtAndJUnitJarAndFilesOnTheClasspath()) .importClasspath() .stream().map(JavaClass::getName).collect(toSet()); @@ -180,6 +190,7 @@ public void creates_JavaPackages() { private JavaClasses importJavaBase() { return new ClassFileImporter() + .withImportOption(EXCLUDE_SUN_PACKAGES) .withImportOption(location -> // before Java 9 packages like java.lang were in rt.jar location.contains("rt.jar") || From f80ab709607ea2e233ae30a7681fbc3e6bd5e0ed Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 13 Apr 2025 16:29:57 +0200 Subject: [PATCH 07/12] remove unused dependencies Signed-off-by: Manfred Hanke --- archunit-junit/build.gradle | 9 --------- archunit-junit/junit4/build.gradle | 7 ------- archunit-junit/junit5/engine-api/build.gradle | 4 ---- archunit-junit/junit5/engine/build.gradle | 1 - 4 files changed, 21 deletions(-) diff --git a/archunit-junit/build.gradle b/archunit-junit/build.gradle index a449537e66..bf385f3f7f 100644 --- a/archunit-junit/build.gradle +++ b/archunit-junit/build.gradle @@ -36,16 +36,11 @@ artifacts { dependencies { archJunitApi project(path: ':archunit', configuration: 'shadow') dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - implementation dependency.slf4j testImplementation dependency.junit4 testImplementation dependency.junit_dataprovider testImplementation dependency.mockito testImplementation dependency.assertj - testImplementation(dependency.assertj_guava) { - exclude module: 'assertj-core' - exclude module: 'guava' - } testImplementation project(path: ':archunit', configuration: 'tests') // This is a hack for running tests with IntelliJ instead of delegating to Gradle, @@ -53,10 +48,6 @@ dependencies { testRuntimeOnly dependency.asm } -archUnitTest { - providesTestJar = true -} - shadowJar { exclude 'META-INF/**' diff --git a/archunit-junit/junit4/build.gradle b/archunit-junit/junit4/build.gradle index b84799d800..306c67a1ab 100644 --- a/archunit-junit/junit4/build.gradle +++ b/archunit-junit/junit4/build.gradle @@ -10,18 +10,11 @@ dependencies { api dependency.junit4 implementation project(path: ':archunit-junit', configuration: 'shadow') dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - implementation dependency.slf4j testImplementation dependency.junit4 - testImplementation dependency.junit_dataprovider testImplementation dependency.mockito testImplementation dependency.assertj - testImplementation(dependency.assertj_guava) { - exclude module: 'assertj-core' - exclude module: 'guava' - } testImplementation project(path: ':archunit', configuration: 'tests') - testImplementation project(path: ':archunit-junit', configuration: 'tests') // This is a hack for running tests with IntelliJ instead of delegating to Gradle, // because for some reason this dependency cannot be resolved otherwise :-( diff --git a/archunit-junit/junit5/engine-api/build.gradle b/archunit-junit/junit5/engine-api/build.gradle index dffc0e57e2..fbc2cf26a2 100644 --- a/archunit-junit/junit5/engine-api/build.gradle +++ b/archunit-junit/junit5/engine-api/build.gradle @@ -9,13 +9,9 @@ ext.minimumJavaVersion = JavaVersion.VERSION_1_8 dependencies { api dependency.junitPlatformEngine implementation project(path: ':archunit') - dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - implementation dependency.slf4j testImplementation project(path: ':archunit-junit5-api') - testImplementation project(path: ':archunit', configuration: 'tests') testImplementation dependency.assertj - testImplementation dependency.mockito } compileJava.dependsOn project(':archunit-junit5-api').finishArchive diff --git a/archunit-junit/junit5/engine/build.gradle b/archunit-junit/junit5/engine/build.gradle index 8100031f2d..d80e4c87e7 100644 --- a/archunit-junit/junit5/engine/build.gradle +++ b/archunit-junit/junit5/engine/build.gradle @@ -12,7 +12,6 @@ dependencies { api project(path: ':archunit-junit5-engine-api') implementation project(path: ':archunit-junit') dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - implementation dependency.slf4j testImplementation project(path: ':archunit', configuration: 'tests') testImplementation dependency.assertj From 3f94312886de7a85793ee8121105af4b5409409c Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 13 Apr 2025 16:29:49 +0200 Subject: [PATCH 08/12] simplify dependency exclusion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `it` in the `exclude(dependency { /*...*/ })` closure of [DependencyFilter](https://github.com/GradleUp/shadow/blob/8.3.6/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/internal/DependencyFilter.groovy) is a [`org.gradle.api.artifacts.ResolvedDependency`](https://docs.gradle.org/current/javadoc/org/gradle/api/artifacts/ResolvedDependency.html), whose [`name`](https://github.com/gradle/gradle/blob/v8.13.0/platforms/software/dependency-management/src/main/java/org/gradle/api/internal/artifacts/DefaultResolvedDependency.java#L76-L78) is a `String`. When the comparison `it.name != dependency.guava` was introduced with 18c5d18e345cdc0bca50bf4348ab3fa8c11b09be, `dependency.guava` was String that could be compared against `it.name`, but 82d61ad39301d0e6fd7604232159ade3835c110c has changed this those to a `Map`. However `dependency.guava` is relocated anyway – and hence removed by the `removeDuplicateThirdParty` task (as it is transitively available in `archunit.jar`), so we can simply drop `dependency.guava` from not being excluded in the `shadowJar`. Signed-off-by: Manfred Hanke --- archunit-junit/junit5/api/build.gradle | 3 +-- archunit-junit/junit5/engine-api/build.gradle | 2 +- archunit-junit/junit5/engine/build.gradle | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/archunit-junit/junit5/api/build.gradle b/archunit-junit/junit5/api/build.gradle index 369cc510bb..5d2e620e31 100644 --- a/archunit-junit/junit5/api/build.gradle +++ b/archunit-junit/junit5/api/build.gradle @@ -23,8 +23,7 @@ shadowJar { exclude 'META-INF/maven/**' dependencies { - exclude(project(':archunit')) - exclude(dependency { it.name != dependency.guava && !it.name.contains('archunit-junit') }) + exclude(dependency { !it.name.contains('archunit-junit') }) } } diff --git a/archunit-junit/junit5/engine-api/build.gradle b/archunit-junit/junit5/engine-api/build.gradle index fbc2cf26a2..32fbf6a702 100644 --- a/archunit-junit/junit5/engine-api/build.gradle +++ b/archunit-junit/junit5/engine-api/build.gradle @@ -26,7 +26,7 @@ shadowJar { exclude 'META-INF/maven/**' dependencies { - exclude(dependency { it.name != dependency.guava }) + exclude(dependency { true }) } } diff --git a/archunit-junit/junit5/engine/build.gradle b/archunit-junit/junit5/engine/build.gradle index d80e4c87e7..b67ff9946e 100644 --- a/archunit-junit/junit5/engine/build.gradle +++ b/archunit-junit/junit5/engine/build.gradle @@ -44,7 +44,7 @@ shadowJar { dependencies { exclude(dependency { def isApi = it.configuration == 'archJunitApi' - def isUnwantedDependency = it.name != dependency.guava && it.moduleName != 'archunit-junit' + def isUnwantedDependency = it.moduleName != 'archunit-junit' isUnwantedDependency || isApi }) } From ce80903a8a37de6575382037982396659622db83 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sat, 12 Apr 2025 23:48:30 +0200 Subject: [PATCH 09/12] introduce Gradle version catalog for ArchUnit dependencies Signed-off-by: Manfred Hanke --- archunit-3rd-party-test/build.gradle | 6 ++--- archunit-example/example-plain/build.gradle | 2 +- archunit-integration-test/build.gradle | 4 +-- archunit-junit/build.gradle | 12 ++++----- archunit-junit/junit4/build.gradle | 16 ++++++------ archunit-junit/junit5/api/build.gradle | 2 +- archunit-junit/junit5/engine-api/build.gradle | 4 +-- archunit-junit/junit5/engine/build.gradle | 8 +++--- archunit-maven-test/build.gradle | 2 +- archunit/build.gradle | 20 +++++++------- build.gradle | 22 +--------------- ...unit.java-release-check-conventions.gradle | 3 ++- .../archunit.java-testing-conventions.gradle | 8 +++--- .../archunit.license-conventions.gradle | 12 ++++----- gradle/libs.versions.toml | 26 +++++++++++++++++++ 15 files changed, 77 insertions(+), 70 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/archunit-3rd-party-test/build.gradle b/archunit-3rd-party-test/build.gradle index 90ff8bf6f5..dfe67a0b46 100644 --- a/archunit-3rd-party-test/build.gradle +++ b/archunit-3rd-party-test/build.gradle @@ -9,7 +9,7 @@ dependencies { testImplementation project(path: ':archunit', configuration: 'tests') testImplementation dependency.springBootLoader dependency.addGuava { dependencyNotation, config -> testImplementation(dependencyNotation, config) } - testImplementation dependency.junit4 - testImplementation dependency.junit_dataprovider - testImplementation dependency.assertj + testImplementation libs.junit4 + testImplementation libs.junit.dataprovider + testImplementation libs.assertj } diff --git a/archunit-example/example-plain/build.gradle b/archunit-example/example-plain/build.gradle index cec9903a34..256e5319de 100644 --- a/archunit-example/example-plain/build.gradle +++ b/archunit-example/example-plain/build.gradle @@ -9,7 +9,7 @@ dependencies { // we still use JUnit 4 as the test runner, but we don't use JUnit 4 support within this project // so tests could well be run using TestNG, etc. - testImplementation dependency.junit4 + testImplementation libs.junit4 } test { diff --git a/archunit-integration-test/build.gradle b/archunit-integration-test/build.gradle index 28032ef4a1..50cb2c18f9 100644 --- a/archunit-integration-test/build.gradle +++ b/archunit-integration-test/build.gradle @@ -7,8 +7,8 @@ ext.moduleName = 'com.tngtech.archunit.integrationtest' ext.minimumJavaVersion = JavaVersion.VERSION_1_8 dependencies { - testImplementation dependency.junitPlatform - testImplementation dependency.assertj + testImplementation libs.junitPlatform + testImplementation libs.assertj testImplementation project(path: ':archunit', configuration: 'tests') testImplementation project(path: ':archunit-junit4') testImplementation project(path: ':archunit-junit5-api') diff --git a/archunit-junit/build.gradle b/archunit-junit/build.gradle index bf385f3f7f..fe367e78d2 100644 --- a/archunit-junit/build.gradle +++ b/archunit-junit/build.gradle @@ -37,15 +37,15 @@ dependencies { archJunitApi project(path: ':archunit', configuration: 'shadow') dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - testImplementation dependency.junit4 - testImplementation dependency.junit_dataprovider - testImplementation dependency.mockito - testImplementation dependency.assertj + testImplementation libs.junit4 + testImplementation libs.junit.dataprovider + testImplementation libs.mockito + testImplementation libs.assertj testImplementation project(path: ':archunit', configuration: 'tests') // This is a hack for running tests with IntelliJ instead of delegating to Gradle, // because for some reason this dependency cannot be resolved otherwise :-( - testRuntimeOnly dependency.asm + testRuntimeOnly libs.asm } shadowJar { @@ -53,7 +53,7 @@ shadowJar { dependencies { exclude(project(':archunit')) - exclude(dependency(dependency.slf4j)) + exclude(dependency("${libs.slf4j.get()}")) } } diff --git a/archunit-junit/junit4/build.gradle b/archunit-junit/junit4/build.gradle index 306c67a1ab..c27182d8fe 100644 --- a/archunit-junit/junit4/build.gradle +++ b/archunit-junit/junit4/build.gradle @@ -7,18 +7,18 @@ ext.moduleName = 'com.tngtech.archunit.junit4' dependencies { api project(path: ':archunit', configuration: 'shadow') api project(path: ':archunit-junit', configuration: 'archJunitApi') - api dependency.junit4 + api libs.junit4 implementation project(path: ':archunit-junit', configuration: 'shadow') dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - testImplementation dependency.junit4 - testImplementation dependency.mockito - testImplementation dependency.assertj + testImplementation libs.junit4 + testImplementation libs.mockito + testImplementation libs.assertj testImplementation project(path: ':archunit', configuration: 'tests') // This is a hack for running tests with IntelliJ instead of delegating to Gradle, // because for some reason this dependency cannot be resolved otherwise :-( - testRuntimeOnly dependency.asm + testRuntimeOnly libs.asm } javadoc { @@ -35,9 +35,9 @@ shadowJar { dependencies { exclude(project(':archunit')) - exclude(dependency(dependency.junit4)) - exclude(dependency(dependency.slf4j)) - exclude(dependency(dependency.hamcrest)) // Shadow doesn't respect transitive excludes :-( + exclude(dependency("${libs.junit4.get()}")) + exclude(dependency("${libs.slf4j.get()}")) + exclude(dependency("${libs.hamcrest.get()}")) // Shadow doesn't respect transitive excludes :-( } } diff --git a/archunit-junit/junit5/api/build.gradle b/archunit-junit/junit5/api/build.gradle index 5d2e620e31..a5ba74a134 100644 --- a/archunit-junit/junit5/api/build.gradle +++ b/archunit-junit/junit5/api/build.gradle @@ -9,7 +9,7 @@ ext.minimumJavaVersion = JavaVersion.VERSION_1_8 dependencies { api project(path: ':archunit') api project(path: ':archunit-junit', configuration: 'archJunitApi') - api dependency.junitPlatformCommons + api libs.junitPlatformCommons } javadoc { diff --git a/archunit-junit/junit5/engine-api/build.gradle b/archunit-junit/junit5/engine-api/build.gradle index 32fbf6a702..210e95230f 100644 --- a/archunit-junit/junit5/engine-api/build.gradle +++ b/archunit-junit/junit5/engine-api/build.gradle @@ -7,11 +7,11 @@ ext.moduleName = 'com.tngtech.archunit.junit5.engineapi' ext.minimumJavaVersion = JavaVersion.VERSION_1_8 dependencies { - api dependency.junitPlatformEngine + api libs.junitPlatformEngine implementation project(path: ':archunit') testImplementation project(path: ':archunit-junit5-api') - testImplementation dependency.assertj + testImplementation libs.assertj } compileJava.dependsOn project(':archunit-junit5-api').finishArchive diff --git a/archunit-junit/junit5/engine/build.gradle b/archunit-junit/junit5/engine/build.gradle index b67ff9946e..5678ce96fd 100644 --- a/archunit-junit/junit5/engine/build.gradle +++ b/archunit-junit/junit5/engine/build.gradle @@ -14,10 +14,10 @@ dependencies { dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } testImplementation project(path: ':archunit', configuration: 'tests') - testImplementation dependency.assertj - testImplementation dependency.mockito - testImplementation dependency.mockito_junit5 - testImplementation dependency.log4j_core + testImplementation libs.assertj + testImplementation libs.mockito + testImplementation libs.mockito.junit5 + testImplementation libs.log4j.core } gradle.projectsEvaluated { diff --git a/archunit-maven-test/build.gradle b/archunit-maven-test/build.gradle index ca74c13ce0..10e9bfa466 100644 --- a/archunit-maven-test/build.gradle +++ b/archunit-maven-test/build.gradle @@ -212,7 +212,7 @@ List integrationTestConfigs = [ ) ] -def vintageEngine = dependency.junit5VintageEngine +def vintageEngine = libs.junit5VintageEngine.get() integrationTestConfigs << new IntegrationTestConfig( javaVersion: integrationTestJavaVersion, testType: TestType.JUNIT5, diff --git a/archunit/build.gradle b/archunit/build.gradle index 16a18ff1d0..a1d54c5e92 100644 --- a/archunit/build.gradle +++ b/archunit/build.gradle @@ -5,17 +5,17 @@ plugins { ext.moduleName = 'com.tngtech.archunit' dependencies { - api dependency.slf4j - implementation dependency.asm + api libs.slf4j + implementation libs.asm dependency.addGuava { dependencyNotation, config -> implementation(dependencyNotation, config) } - testImplementation dependency.log4j_api - testImplementation dependency.log4j_core - testImplementation dependency.junit4 - testImplementation dependency.junit_dataprovider - testImplementation dependency.mockito - testImplementation dependency.assertj - testImplementation(dependency.assertj_guava) { + testImplementation libs.log4j.api + testImplementation libs.log4j.core + testImplementation libs.junit4 + testImplementation libs.junit.dataprovider + testImplementation libs.mockito + testImplementation libs.assertj + testImplementation(libs.assertj.guava) { exclude module: 'assertj-core' exclude module: 'guava' } @@ -25,7 +25,7 @@ shadowJar { exclude 'META-INF/**' dependencies { - exclude(dependency(dependency.slf4j)) + exclude(dependency("${libs.slf4j.get()}")) } } diff --git a/build.gradle b/build.gradle index 42ff02185d..efbea43a1f 100644 --- a/build.gradle +++ b/build.gradle @@ -35,34 +35,14 @@ ext { googleRelocationPackage = "${thirdPartyRelocationPackage}.com.google" dependency = [ - asm : [group: 'org.ow2.asm', name: 'asm', version: '9.8'], - guava : [group: 'com.google.guava', name: 'guava', version: '33.4.8-jre'], addGuava : { dependencyHandler -> - dependencyHandler(dependency.guava) { + dependencyHandler(libs.guava) { exclude module: 'listenablefuture' exclude module: 'jspecify' exclude module: 'error_prone_annotations' exclude module: 'j2objc-annotations' } }, - slf4j : [group: 'org.slf4j', name: 'slf4j-api', version: '2.0.17'], - log4j_api : [group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.24.3'], - log4j_core : [group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.24.3'], - log4j_slf4j : [group: 'org.apache.logging.log4j', name: 'log4j-slf4j2-impl', version: '2.24.3'], - - junit4 : [group: 'junit', name: 'junit', version: '4.13.2'], - junit5Jupiter : [group: 'org.junit.jupiter', name: 'junit-jupiter', version: '5.12.2'], - junit5VintageEngine : [group: 'org.junit.vintage', name: 'junit-vintage-engine', version: '5.12.2'], - junitPlatform : [group: 'org.junit.platform', name: 'junit-platform-runner', version: '1.12.2'], - junitPlatformCommons : [group: 'org.junit.platform', name: 'junit-platform-commons', version: '1.12.2'], - junitPlatformEngine : [group: 'org.junit.platform', name: 'junit-platform-engine', version: '1.12.2'], - junitPlatformLauncher: [group: 'org.junit.platform', name: 'junit-platform-launcher', version: '1.12.2'], - hamcrest : [group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'], - junit_dataprovider : [group: 'com.tngtech.java', name: 'junit-dataprovider', version: '1.11.0'], - mockito : [group: 'org.mockito', name: 'mockito-core', version: '4.11.0'], // mockito 5 requires Java 11 - mockito_junit5 : [group: 'org.mockito', name: 'mockito-junit-jupiter', version: '4.6.1'], - assertj : [group: 'org.assertj', name: 'assertj-core', version: '3.27.3'], - assertj_guava : [group: 'org.assertj', name: 'assertj-guava', version: '3.27.3'], // Dependencies for example projects / tests javaxAnnotationApi : [group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'], diff --git a/buildSrc/src/main/groovy/archunit.java-release-check-conventions.gradle b/buildSrc/src/main/groovy/archunit.java-release-check-conventions.gradle index 6ee53b462a..ee4bd8480c 100644 --- a/buildSrc/src/main/groovy/archunit.java-release-check-conventions.gradle +++ b/buildSrc/src/main/groovy/archunit.java-release-check-conventions.gradle @@ -17,7 +17,8 @@ task ensureReleaseCheckUpToDate { } releaseCheckDependencies.each { releaseCheckDependency -> - def matchingProjectDependency = dependency.values().find { + def versionCatalog = versionCatalogs.named("libs") + def matchingProjectDependency = versionCatalog.libraryAliases.collect { versionCatalog.findLibrary(it).get().get() }.find { it.group == releaseCheckDependency.groupId && it.name == releaseCheckDependency.artifactId } assert matchingProjectDependency != null: diff --git a/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle b/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle index fc1ed312d2..8dcd5ccd64 100644 --- a/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle +++ b/buildSrc/src/main/groovy/archunit.java-testing-conventions.gradle @@ -9,11 +9,11 @@ abstract class ArchUnitTestExtension { ext.archUnitTest = extensions.create('archUnitTest', ArchUnitTestExtension) dependencies { - testImplementation dependency.junit5Jupiter + testImplementation libs.junit5Jupiter - testRuntimeOnly dependency.junit5VintageEngine - testRuntimeOnly dependency.junitPlatformLauncher - testRuntimeOnly dependency.log4j_slf4j + testRuntimeOnly libs.junit5VintageEngine + testRuntimeOnly libs.junitPlatformLauncher + testRuntimeOnly libs.log4j.slf4j } tasks.withType(Test) { diff --git a/buildSrc/src/main/groovy/archunit.license-conventions.gradle b/buildSrc/src/main/groovy/archunit.license-conventions.gradle index 7428af7e81..921f6e71bd 100644 --- a/buildSrc/src/main/groovy/archunit.license-conventions.gradle +++ b/buildSrc/src/main/groovy/archunit.license-conventions.gradle @@ -8,12 +8,12 @@ def fillTemplateFile = { String resourceName -> replace('${owner}', "${company.name}") } -def pomOf = { Map dep -> - "${dep.group}:${dep.name}:${dep.version}@pom" +def pomOf = { MinimalExternalModuleDependency dep, nameSuffix = "" -> + "${dep.module.group}:${dep.module.name}${nameSuffix}:${dep.version}@pom" } -def parentPomOf = { Map dep -> - pomOf(dep + [name: "${dep.name}-parent"]) +def parentPomOf = { MinimalExternalModuleDependency dep -> + pomOf(dep, "-parent") } configurations { @@ -22,8 +22,8 @@ configurations { } dependencies { - thirdpartyAsm pomOf(dependency.asm) - thirdpartyGuava parentPomOf(dependency.guava) + thirdpartyAsm pomOf(libs.asm.get()) + thirdpartyGuava parentPomOf(libs.guava.get()) } def parseLicenseInfoFrom = { config -> diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 0000000000..2fb627bce8 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,26 @@ +[versions] +log4j = "2.24.3" +junit5 = "5.12.2" +junitPlatform = "1.12.2" +assertj = "3.27.3" + +[libraries] +asm = { group = "org.ow2.asm", name = "asm", version = "9.8" } +guava = { group = "com.google.guava", name = "guava", version = "33.4.8-jre" } +slf4j = { group = "org.slf4j", name = "slf4j-api", version = "2.0.17" } +log4j_api = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" } +log4j_core = { group = "org.apache.logging.log4j", name = "log4j-core", version.ref = "log4j" } +log4j_slf4j = { group = "org.apache.logging.log4j", name = "log4j-slf4j2-impl", version.ref = "log4j" } +junit4 = { group = "junit", name = "junit", version = "4.13.2" } +junit5Jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit5" } +junit5VintageEngine = { group = "org.junit.vintage", name = "junit-vintage-engine", version.ref = "junit5" } +junitPlatform = { group = "org.junit.platform", name = "junit-platform-runner", version.ref = "junitPlatform" } +junitPlatformCommons = { group = "org.junit.platform", name = "junit-platform-commons", version.ref = "junitPlatform" } +junitPlatformEngine = { group = "org.junit.platform", name = "junit-platform-engine", version.ref = "junitPlatform" } +junitPlatformLauncher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" } +hamcrest = { group = "org.hamcrest", name = "hamcrest-core", version = "1.3" } +junit_dataprovider = { group = "com.tngtech.java", name = "junit-dataprovider", version = "1.11.0" } +mockito = { group = "org.mockito", name = "mockito-core", version = "4.11.0" } # mockito 5 requires Java 11 +mockito_junit5 = { group = "org.mockito", name = "mockito-junit-jupiter", version = "4.6.1" } +assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" } +assertj_guava = { group = "org.assertj", name = "assertj-guava", version.ref = "assertj" } From 548da3c93a9d7808032fba9a26abd1f456b1529c Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sat, 19 Apr 2025 21:28:17 +0200 Subject: [PATCH 10/12] use Gradle version catalog for ArchUnit-Examples --- archunit-3rd-party-test/build.gradle | 2 +- build.gradle | 13 ------------- .../archunit.java-examples-conventions.gradle | 16 ++++++++-------- gradle/libs.versions.toml | 13 +++++++++++++ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/archunit-3rd-party-test/build.gradle b/archunit-3rd-party-test/build.gradle index dfe67a0b46..b652a1a8b2 100644 --- a/archunit-3rd-party-test/build.gradle +++ b/archunit-3rd-party-test/build.gradle @@ -7,7 +7,7 @@ ext.moduleName = 'com.tngtech.archunit.thirdpartytest' dependencies { testImplementation project(path: ':archunit', configuration: 'shadow') testImplementation project(path: ':archunit', configuration: 'tests') - testImplementation dependency.springBootLoader + testImplementation libs.springBootLoader dependency.addGuava { dependencyNotation, config -> testImplementation(dependencyNotation, config) } testImplementation libs.junit4 testImplementation libs.junit.dataprovider diff --git a/build.gradle b/build.gradle index efbea43a1f..927090a54a 100644 --- a/build.gradle +++ b/build.gradle @@ -43,19 +43,6 @@ ext { exclude module: 'j2objc-annotations' } }, - - // Dependencies for example projects / tests - javaxAnnotationApi : [group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'], - springBeans : [group: 'org.springframework', name: 'spring-beans', version: '5.3.23'], - springBootLoader : [group: 'org.springframework.boot', name: 'spring-boot-loader', version: '2.7.13'], - jakartaInject : [group: 'jakarta.inject', name: 'jakarta.inject-api', version: '2.0.1'], - jakartaAnnotations : [group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: '2.1.1'], - guice : [group: 'com.google.inject', name: 'guice', version: '5.1.0'], - // NOTE: The pure javaee-api dependencies are crippled, so to run any test we need to choose a full implementation provider - geronimoEjb : [group: 'org.apache.geronimo.specs', name: 'geronimo-ejb_3.1_spec', version: '1.0.2'], - geronimoJpa : [group: 'org.apache.geronimo.specs', name: 'geronimo-jpa_2.0_spec', version: '1.1'], - jodaTime : [group: 'joda-time', name: 'joda-time', version: '2.12.7'], - joox : [group: 'org.jooq', name: 'joox-java-6', version: '1.6.0'] ] minSupportedJavaVersion = JavaVersion.VERSION_1_8 diff --git a/buildSrc/src/main/groovy/archunit.java-examples-conventions.gradle b/buildSrc/src/main/groovy/archunit.java-examples-conventions.gradle index 1d00e5ea80..3e9843c460 100644 --- a/buildSrc/src/main/groovy/archunit.java-examples-conventions.gradle +++ b/buildSrc/src/main/groovy/archunit.java-examples-conventions.gradle @@ -11,14 +11,14 @@ archUnitTest { } rootProject.ext.archUnitExamplesMainDependencies = [ - dependency.jodaTime, - dependency.javaxAnnotationApi, - dependency.jakartaInject, - dependency.jakartaAnnotations, - dependency.springBeans, - dependency.guice, - dependency.geronimoEjb, - dependency.geronimoJpa + libs.jodaTime, + libs.javaxAnnotationApi, + libs.jakartaInject, + libs.jakartaAnnotations, + libs.springBeans, + libs.guice, + libs.geronimoEjb, + libs.geronimoJpa ] dependencies { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2fb627bce8..468f8645f0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,3 +24,16 @@ mockito = { group = "org.mockito", name = "mockito-core", version = "4.11.0" } # mockito_junit5 = { group = "org.mockito", name = "mockito-junit-jupiter", version = "4.6.1" } assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" } assertj_guava = { group = "org.assertj", name = "assertj-guava", version.ref = "assertj" } + +# Dependencies for example projects / tests +javaxAnnotationApi = { group = "javax.annotation", name = "javax.annotation-api", version = "1.3.2" } +springBeans = {group = "org.springframework", name = "spring-beans", version = "5.3.23" } +springBootLoader = { group = "org.springframework.boot", name = "spring-boot-loader", version = "2.7.13" } +jakartaInject = { group = "jakarta.inject", name = "jakarta.inject-api", version = "2.0.1" } +jakartaAnnotations = { group = "jakarta.annotation", name = "jakarta.annotation-api", version = "2.1.1" } +guice = { group = "com.google.inject", name = "guice", version = "5.1.0" } +# NOTE: The pure javaee-api dependencies are crippled, so to run any test we need to choose a full implementation provider +geronimoEjb = {group = "org.apache.geronimo.specs", name = "geronimo-ejb_3.1_spec", version = "1.0.2" } +geronimoJpa = { group = "org.apache.geronimo.specs", name = "geronimo-jpa_2.0_spec", version = "1.1" } +jodaTime = { group = "joda-time", name = "joda-time", version = "2.12.7" } +joox = { group = "org.jooq", name = "joox-java-6", version = "1.6.0" } From a5738549d5acad11475dab7c8a133a9afff48020 Mon Sep 17 00:00:00 2001 From: Manfred Hanke Date: Sun, 20 Apr 2025 19:36:25 +0200 Subject: [PATCH 11/12] downgrade to test dependabot --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 468f8645f0..c2f7ef1961 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] log4j = "2.24.3" -junit5 = "5.12.2" -junitPlatform = "1.12.2" +junit5 = "5.11.2" +junitPlatform = "1.11.2" assertj = "3.27.3" [libraries] -asm = { group = "org.ow2.asm", name = "asm", version = "9.8" } +asm = { group = "org.ow2.asm", name = "asm", version = "9.7.1" } guava = { group = "com.google.guava", name = "guava", version = "33.4.8-jre" } slf4j = { group = "org.slf4j", name = "slf4j-api", version = "2.0.17" } log4j_api = { group = "org.apache.logging.log4j", name = "log4j-api", version.ref = "log4j" } From 5b364a0ff8e2137cc6f8f8156656dc427d645e3f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Apr 2025 21:35:36 +0000 Subject: [PATCH 12/12] Bump com.tngtech.java:junit-dataprovider from 1.11.0 to 1.13.1 Bumps [com.tngtech.java:junit-dataprovider](https://github.com/TNG/junit-dataprovider) from 1.11.0 to 1.13.1. - [Release notes](https://github.com/TNG/junit-dataprovider/releases) - [Commits](https://github.com/TNG/junit-dataprovider/compare/v1.11.0...v1.13.1) --- updated-dependencies: - dependency-name: com.tngtech.java:junit-dataprovider dependency-version: 1.13.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c2f7ef1961..34aa0715ec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ junitPlatformCommons = { group = "org.junit.platform", name = "junit-platform-co junitPlatformEngine = { group = "org.junit.platform", name = "junit-platform-engine", version.ref = "junitPlatform" } junitPlatformLauncher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" } hamcrest = { group = "org.hamcrest", name = "hamcrest-core", version = "1.3" } -junit_dataprovider = { group = "com.tngtech.java", name = "junit-dataprovider", version = "1.11.0" } +junit_dataprovider = { group = "com.tngtech.java", name = "junit-dataprovider", version = "1.13.1" } mockito = { group = "org.mockito", name = "mockito-core", version = "4.11.0" } # mockito 5 requires Java 11 mockito_junit5 = { group = "org.mockito", name = "mockito-junit-jupiter", version = "4.6.1" } assertj = { group = "org.assertj", name = "assertj-core", version.ref = "assertj" }