Skip to content

Commit 60c91ac

Browse files
Migrate aspectjweaver from 1.9.20.1 to 1.9.23 (#6064)
AspectJ 1.9.23 introduced support for Java 23 through upgrading the Eclipse JDT compiler. Unfortunately, the Eclipse JDT compiler dropped support for Java version under Java 17 and since we have builds using versions lower than 17, we need to work around this: 1. We cannot use versions under Java 17 for compiling with ajc so this is disabled for those builds. Artifacts are built using Java 17+ so this is not a problem for them. 2. Since we have binary compatibility checks (japicmp), we need to disable them for the AspectJ created fields and methods for builds using Java versions lower than 17. 3. In micrometer-test-aspectj-ctw, we cannot test Compile-Time Weaving (CTW) using Java versions lower than 17 as we did before the version upgrade since we cannot compile those classes with ajc anymore on these Java versions. Instead, we can use the latest Micrometer SNAPSHOT (built with Java 17+) and the latest AspectJ that supports Java versions before 17 (1.9.20.1 as of today). See gh-6022
1 parent 65cefc7 commit 60c91ac

File tree

5 files changed

+68
-7
lines changed

5 files changed

+68
-7
lines changed

gradle/libs.versions.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ activemq-artemis = "2.40.0"
33
application-insights = "2.6.4"
44
archunit = "1.4.0"
55
asmForPlugins = "7.3.1"
6-
# 1.9.20.1 is the last release that accepts jdk 11 for building
7-
aspectjweaver = "1.9.20.1"
6+
aspectjweaver = "1.9.23"
87
assertj = "3.27.3"
98
awaitility = "4.3.0"
109
caffeine = "2.9.3"

micrometer-core/build.gradle

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,32 @@
11
plugins {
22
alias(libs.plugins.kotlin19)
3-
alias(libs.plugins.aspectj)
3+
alias(libs.plugins.aspectj) apply false
44
id 'me.champeau.mrjar' version "0.1.1"
55
}
66

7+
if (javaLanguageVersion.canCompileOrRun(17)) {
8+
apply plugin: 'io.freefair.aspectj.post-compile-weaving'
9+
}
10+
else {
11+
// ignore ajc generated code from japicmp comparison for < Java 17 builds
12+
project.tasks.japicmp {
13+
fieldExcludes.addAll([
14+
'io.micrometer.core.aop.CountedAspect#ajc$perSingletonInstance',
15+
'io.micrometer.core.aop.TimedAspect#ajc$perSingletonInstance'
16+
])
17+
methodExcludes.addAll([
18+
'io.micrometer.core.aop.CountedAspect#ajc$inlineAccessFieldGet$io_micrometer_core_aop_CountedAspect$io_micrometer_core_aop_CountedAspect$shouldSkip(io.micrometer.core.aop.CountedAspect)',
19+
'io.micrometer.core.aop.CountedAspect#ajc$inlineAccessMethod$io_micrometer_core_aop_CountedAspect$io_micrometer_core_aop_CountedAspect$perform(io.micrometer.core.aop.CountedAspect, org.aspectj.lang.ProceedingJoinPoint, io.micrometer.core.annotation.Counted)',
20+
'io.micrometer.core.aop.CountedAspect#aspectOf()',
21+
'io.micrometer.core.aop.CountedAspect#hasAspect()',
22+
'io.micrometer.core.aop.TimedAspect#ajc$inlineAccessFieldGet$io_micrometer_core_aop_TimedAspect$io_micrometer_core_aop_TimedAspect$shouldSkip(io.micrometer.core.aop.TimedAspect)',
23+
'io.micrometer.core.aop.TimedAspect#ajc$inlineAccessMethod$io_micrometer_core_aop_TimedAspect$io_micrometer_core_aop_TimedAspect$perform(io.micrometer.core.aop.TimedAspect, org.aspectj.lang.ProceedingJoinPoint, io.micrometer.core.annotation.Timed, java.lang.reflect.Method)',
24+
'io.micrometer.core.aop.TimedAspect#aspectOf()',
25+
'io.micrometer.core.aop.TimedAspect#hasAspect()'
26+
])
27+
}
28+
}
29+
730
description 'Core module of Micrometer containing instrumentation API and implementation'
831

932
multiRelease {

micrometer-observation/build.gradle

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
plugins {
2-
alias(libs.plugins.aspectj)
2+
alias(libs.plugins.aspectj) apply false
3+
}
4+
5+
if (javaLanguageVersion.canCompileOrRun(17)) {
6+
apply plugin: 'io.freefair.aspectj.post-compile-weaving'
7+
}
8+
else {
9+
// ignore ajc generated code from japicmp comparison for < Java 17 builds
10+
project.tasks.japicmp {
11+
fieldExcludes.addAll([
12+
'io.micrometer.observation.aop.ObservedAspect#ajc$perSingletonInstance'
13+
])
14+
methodExcludes.addAll([
15+
'io.micrometer.observation.aop.ObservedAspect#ajc$inlineAccessFieldGet$io_micrometer_observation_aop_ObservedAspect$io_micrometer_observation_aop_ObservedAspect$shouldSkip(io.micrometer.observation.aop.ObservedAspect)',
16+
'io.micrometer.observation.aop.ObservedAspect#ajc$inlineAccessMethod$io_micrometer_observation_aop_ObservedAspect$io_micrometer_observation_aop_ObservedAspect$getDeclaringClass(io.micrometer.observation.aop.ObservedAspect, org.aspectj.lang.ProceedingJoinPoint)',
17+
'io.micrometer.observation.aop.ObservedAspect#ajc$inlineAccessMethod$io_micrometer_observation_aop_ObservedAspect$io_micrometer_observation_aop_ObservedAspect$getMethod(io.micrometer.observation.aop.ObservedAspect, org.aspectj.lang.ProceedingJoinPoint)',
18+
'io.micrometer.observation.aop.ObservedAspect#ajc$inlineAccessMethod$io_micrometer_observation_aop_ObservedAspect$io_micrometer_observation_aop_ObservedAspect$observe(io.micrometer.observation.aop.ObservedAspect, org.aspectj.lang.ProceedingJoinPoint, java.lang.reflect.Method, io.micrometer.observation.annotation.Observed)',
19+
'io.micrometer.observation.aop.ObservedAspect#aspectOf()',
20+
'io.micrometer.observation.aop.ObservedAspect#hasAspect()'
21+
])
22+
}
323
}
424

525
description 'Module containing Observation related code'

micrometer-test-aspectj-ctw/build.gradle

+16-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,23 @@ plugins {
55

66
description 'AspectJ compile-time weaving test for Micrometer aspects'
77

8+
if (!javaLanguageVersion.canCompileOrRun(17)) {
9+
repositories {
10+
maven { url 'https://repo.spring.io/snapshot' }
11+
}
12+
}
13+
814
dependencies {
9-
aspect project(':micrometer-core')
10-
aspect project(':micrometer-observation')
11-
implementation libs.aspectjrt
15+
if (javaLanguageVersion.canCompileOrRun(17)) {
16+
aspect project(':micrometer-core')
17+
implementation libs.aspectjrt
18+
}
19+
else {
20+
// Use the latest Micrometer SNAPSHOT (built with Java 17+)
21+
// and the latest AspectJ that supports Java versions before 17
22+
aspect 'io.micrometer:micrometer-core:latest.integration'
23+
implementation 'org.aspectj:aspectjrt:1.9.20.1'
24+
}
1225

1326
testImplementation libs.assertj
1427
}

micrometer-test-aspectj-ctw/src/test/java/io/micrometer/test/ctw/MeasuredClassTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.micrometer.observation.ObservationRegistry;
2626
import io.micrometer.observation.Observations;
2727
import org.junit.jupiter.api.AfterEach;
28+
import org.junit.jupiter.api.BeforeAll;
2829
import org.junit.jupiter.api.BeforeEach;
2930
import org.junit.jupiter.api.Test;
3031

@@ -40,6 +41,11 @@ class MeasuredClassTest {
4041

4142
MeasuredClass measured = new MeasuredClass();
4243

44+
@BeforeAll
45+
static void setUpClass() {
46+
System.out.println("java.version: " + System.getProperty("java.version"));
47+
}
48+
4349
@BeforeEach
4450
void setUp() {
4551
observationRegistry.observationConfig().observationHandler(new DefaultMeterObservationHandler(registry));

0 commit comments

Comments
 (0)