Skip to content

Commit c709cc7

Browse files
committed
make graal conditional for java 17+
Signed-off-by: Jay DeLuca <jaydeluca4@gmail.com>
1 parent 3f2e73b commit c709cc7

File tree

3 files changed

+106
-75
lines changed

3 files changed

+106
-75
lines changed

.github/workflows/multi-version-test.yml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,4 @@ jobs:
3636
${{ runner.os }}-maven-
3737
3838
- name: Build and test on Java ${{ matrix.java }}
39-
run: |
40-
if [ "${{ matrix.java }}" = "11" ]; then
41-
echo "Building on Java 11 - excluding integration-tests module (GraalVM plugin requires Java 17+)"
42-
./mvnw clean install -Dtest.java.version=11 -pl '!integration-tests'
43-
else
44-
./mvnw clean install -Dtest.java.version=${{ matrix.java }}
45-
fi
39+
run: ./mvnw clean install -Dtest.java.version=${{ matrix.java }}

integration-tests/it-spring-boot-smoke-test/pom.xml

Lines changed: 80 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
Spring Smoke Tests
2222
</description>
2323
<properties>
24-
<java.version>25</java.version>
24+
<java.version>${test.java.version}</java.version>
2525
<junit-jupiter.version>6.0.1</junit-jupiter.version>
2626
</properties>
2727

@@ -89,72 +89,6 @@
8989

9090
<build>
9191
<plugins>
92-
<plugin>
93-
<groupId>org.graalvm.buildtools</groupId>
94-
<artifactId>native-maven-plugin</artifactId>
95-
<configuration>
96-
<!-- editorconfig-checker-disable -->
97-
<buildArgs>
98-
<buildArg>
99-
--initialize-at-build-time=org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences
100-
</buildArg>
101-
<buildArg>
102-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo
103-
</buildArg>
104-
<buildArg>
105-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$LifecycleMethods
106-
</buildArg>
107-
<buildArg>
108-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassTemplateInvocationTestDescriptor
109-
</buildArg>
110-
<buildArg>
111-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassTemplateTestDescriptor
112-
</buildArg>
113-
<buildArg>
114-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.DynamicDescendantFilter$Mode
115-
</buildArg>
116-
<buildArg>
117-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$1
118-
</buildArg>
119-
<buildArg>
120-
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo
121-
</buildArg>
122-
<buildArg>
123-
--initialize-at-build-time=org.junit.jupiter.engine.discovery.ClassSelectorResolver$DummyClassTemplateInvocationContext
124-
</buildArg>
125-
<buildArg>
126-
--initialize-at-build-time=org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue
127-
</buildArg>
128-
<buildArg>--initialize-at-build-time=org.junit.platform.launcher.core.DiscoveryIssueNotifier
129-
</buildArg>
130-
<buildArg>
131-
--initialize-at-build-time=org.junit.platform.launcher.core.HierarchicalOutputDirectoryProvider
132-
</buildArg>
133-
<buildArg>
134-
--initialize-at-build-time=org.junit.platform.launcher.core.LauncherDiscoveryResult$EngineResultInfo
135-
</buildArg>
136-
<buildArg>
137-
--initialize-at-build-time=org.junit.platform.suite.engine.SuiteTestDescriptor$LifecycleMethods
138-
</buildArg>
139-
<buildArg>
140-
--initialize-at-build-time=org.junit.platform.commons.logging.LoggerFactory$DelegatingLogger
141-
</buildArg>
142-
<buildArg>
143-
--initialize-at-build-time=org.junit.jupiter.engine.execution.ConditionEvaluator
144-
</buildArg>
145-
<buildArg>
146-
--initialize-at-build-time=org.junit.jupiter.engine.execution.InterceptingExecutableInvoker
147-
</buildArg>
148-
<buildArg>
149-
--initialize-at-build-time=org.junit.jupiter.api.extension.ConditionEvaluationResult
150-
</buildArg>
151-
<buildArg>
152-
--initialize-at-build-time=org.junit.jupiter.engine.execution.InvocationInterceptorChain
153-
</buildArg>
154-
</buildArgs>
155-
<!-- editorconfig-checker-enable -->
156-
</configuration>
157-
</plugin>
15892
<plugin>
15993
<groupId>org.springframework.boot</groupId>
16094
<artifactId>spring-boot-maven-plugin</artifactId>
@@ -180,4 +114,83 @@
180114
</plugins>
181115
</build>
182116

117+
<profiles>
118+
<profile>
119+
<id>graalvm-native</id>
120+
<activation>
121+
<jdk>[17,)</jdk>
122+
</activation>
123+
<build>
124+
<plugins>
125+
<plugin>
126+
<groupId>org.graalvm.buildtools</groupId>
127+
<artifactId>native-maven-plugin</artifactId>
128+
<configuration>
129+
<!-- editorconfig-checker-disable -->
130+
<buildArgs>
131+
<buildArg>
132+
--initialize-at-build-time=org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences
133+
</buildArg>
134+
<buildArg>
135+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$ClassInfo
136+
</buildArg>
137+
<buildArg>
138+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor$LifecycleMethods
139+
</buildArg>
140+
<buildArg>
141+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassTemplateInvocationTestDescriptor
142+
</buildArg>
143+
<buildArg>
144+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ClassTemplateTestDescriptor
145+
</buildArg>
146+
<buildArg>
147+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.DynamicDescendantFilter$Mode
148+
</buildArg>
149+
<buildArg>
150+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.ExclusiveResourceCollector$1
151+
</buildArg>
152+
<buildArg>
153+
--initialize-at-build-time=org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor$MethodInfo
154+
</buildArg>
155+
<buildArg>
156+
--initialize-at-build-time=org.junit.jupiter.engine.discovery.ClassSelectorResolver$DummyClassTemplateInvocationContext
157+
</buildArg>
158+
<buildArg>
159+
--initialize-at-build-time=org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue
160+
</buildArg>
161+
<buildArg>--initialize-at-build-time=org.junit.platform.launcher.core.DiscoveryIssueNotifier
162+
</buildArg>
163+
<buildArg>
164+
--initialize-at-build-time=org.junit.platform.launcher.core.HierarchicalOutputDirectoryProvider
165+
</buildArg>
166+
<buildArg>
167+
--initialize-at-build-time=org.junit.platform.launcher.core.LauncherDiscoveryResult$EngineResultInfo
168+
</buildArg>
169+
<buildArg>
170+
--initialize-at-build-time=org.junit.platform.suite.engine.SuiteTestDescriptor$LifecycleMethods
171+
</buildArg>
172+
<buildArg>
173+
--initialize-at-build-time=org.junit.platform.commons.logging.LoggerFactory$DelegatingLogger
174+
</buildArg>
175+
<buildArg>
176+
--initialize-at-build-time=org.junit.jupiter.engine.execution.ConditionEvaluator
177+
</buildArg>
178+
<buildArg>
179+
--initialize-at-build-time=org.junit.jupiter.engine.execution.InterceptingExecutableInvoker
180+
</buildArg>
181+
<buildArg>
182+
--initialize-at-build-time=org.junit.jupiter.api.extension.ConditionEvaluationResult
183+
</buildArg>
184+
<buildArg>
185+
--initialize-at-build-time=org.junit.jupiter.engine.execution.InvocationInterceptorChain
186+
</buildArg>
187+
</buildArgs>
188+
<!-- editorconfig-checker-enable -->
189+
</configuration>
190+
</plugin>
191+
</plugins>
192+
</build>
193+
</profile>
194+
</profiles>
195+
183196
</project>

prometheus-metrics-exporter-httpserver/src/test/java/io/prometheus/metrics/exporter/httpserver/HTTPServerTest.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.prometheus.metrics.model.registry.PrometheusScrapeRequest;
1313
import io.prometheus.metrics.model.snapshots.MetricSnapshots;
1414
import java.io.IOException;
15+
import java.lang.reflect.Method;
1516
import java.net.InetAddress;
1617
import java.net.InetSocketAddress;
1718
import java.net.Socket;
@@ -45,7 +46,7 @@ public Result authenticate(HttpExchange exchange) {
4546
HttpHandler handler =
4647
exchange -> {
4748
boolean found = false;
48-
Subject current = Subject.current();
49+
Subject current = getCurrentSubject();
4950
for (Principal p : current.getPrincipals()) {
5051
if (user.equals(p.getName())) {
5152
found = true;
@@ -186,4 +187,27 @@ void healthDisabled() throws IOException {
186187
"204",
187188
"/-/healthy");
188189
}
190+
191+
/**
192+
* Get current Subject using reflection to support both Java 17 and Java 18+.
193+
*
194+
* <p>Java 18+ has Subject.current(), but Java 17 and earlier require
195+
* Subject.getSubject(AccessController.getContext()).
196+
*/
197+
@SuppressWarnings({"removal"})
198+
private static Subject getCurrentSubject() {
199+
try {
200+
Method currentMethod = Subject.class.getMethod("current");
201+
return (Subject) currentMethod.invoke(null);
202+
} catch (NoSuchMethodException e) {
203+
// Fall back to pre-Java 18 API
204+
try {
205+
return Subject.getSubject(java.security.AccessController.getContext());
206+
} catch (Exception ex) {
207+
throw new RuntimeException("Failed to get current Subject", ex);
208+
}
209+
} catch (Exception e) {
210+
throw new RuntimeException("Failed to invoke Subject.current()", e);
211+
}
212+
}
189213
}

0 commit comments

Comments
 (0)