Support for graalvm

Open
#1,605 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
java
Domain
testing-qa

Research direction

Start by tracing how PluginLoader loads ModuleImportPlugin and how GraalVM native-image configuration handles that class; the issue provides a Spring Modulith reproduction and a startup stack trace, but names no source files or tests. Reproduce the native-image failure, then verify the application starts without the ClassNotFoundException.

Written by the indexing model from the issue text.

Description

Hello!

I’m working with Spring Modulith (https://github.com/spring-projects/spring-modulith), which depends on ArchUnit. I built it as a native image using GraalVM 25.0.1, and when I start the application, I encounter the following error:

2026-04-15T10:19:48.531Z  INFO 1 --- [calc-fp] [cTaskExecutor-1] [                                                 ] c.t.a.c.PluginLoader                     : Detected Java version 25.0.2
2026-04-15T10:19:48.531Z DEBUG 1 --- [calc-fp] [cTaskExecutor-1] [                                                 ] c.t.a.c.PluginLoader                     : Current Java version is compatible to JAVA_9 => Loading Plugin com.tngtech.archunit.core.importer.ModuleImportPlugin
2026-04-15T10:19:48.531Z  WARN 1 --- [calc-fp] [           main] [                                                 ] .r.c.ReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'healthEndpointGroupsBeanPostProcessor': java.lang.ExceptionInInitializerError
Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'healthEndpointGroupsBeanPostProcessor': java.lang.ExceptionInInitializerError
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:610)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:277)
	at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:812)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:605)
	at org.springframework.boot.web.server.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:69)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1365)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354)
	at ru.alfabank.app.ApplicationKt.main(Application.kt:15)
	at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: java.util.concurrent.CompletionException: java.lang.ExceptionInInitializerError
	at [email protected]/java.util.concurrent.CompletableFuture.wrapInCompletionException(CompletableFuture.java:323)
	at [email protected]/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:359)
	at [email protected]/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:364)
	at [email protected]/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1791)
	at [email protected]/java.lang.Thread.runWith(Thread.java:1487)
	at [email protected]/java.lang.VirtualThread.run(VirtualThread.java:456)
	at [email protected]/java.lang.VirtualThread$VThreadContinuation$1.run(VirtualThread.java:248)
Caused by: java.lang.ExceptionInInitializerError
	at com.tngtech.archunit.core.importer.ClassFileImporter.lambda$importPackages$1(ClassFileImporter.java:212)
	at [email protected]/java.util.stream.ReferencePipeline$7$1FlatMap.accept(ReferencePipeline.java:288)
	at [email protected]/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1716)
	at [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
	at [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
	at [email protected]/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
	at [email protected]/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:723)
	at com.tngtech.archunit.core.importer.ClassFileImporter.importPackages(ClassFileImporter.java:213)
	at org.springframework.modulith.core.ApplicationModules.<init>(ApplicationModules.java:134)
	at org.springframework.modulith.core.ApplicationModules.<init>(ApplicationModules.java:96)
	at org.springframework.modulith.core.ApplicationModules.lambda$of$20(ApplicationModules.java:699)
	at [email protected]/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1724)
	at org.springframework.modulith.core.ApplicationModules.of(ApplicationModules.java:696)
	at org.springframework.modulith.core.ApplicationModules.of(ApplicationModules.java:237)
	at org.springframework.modulith.core.ApplicationModules.of(ApplicationModules.java:219)
	at org.springframework.modulith.runtime.autoconfigure.SpringModulithRuntimeAutoConfiguration$ApplicationModulesBootstrap.initializeApplicationModules(SpringModulithRuntimeAutoConfiguration.java:238)
	at org.springframework.modulith.runtime.autoconfigure.SpringModulithRuntimeAutoConfiguration$ApplicationModulesBootstrap.lambda$new$0(SpringModulithRuntimeAutoConfiguration.java:202)
	at org.springframework.util.concurrent.FutureUtils.lambda$toSupplier$0(FutureUtils.java:74)
	at [email protected]/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1789)
	... 3 more
Caused by: com.tngtech.archunit.core.PluginLoader$PluginLoadingFailedException: Couldn't load plugin of type com.tngtech.archunit.core.importer.ModuleImportPlugin
	at com.tngtech.archunit.core.PluginLoader$PluginSupplier.create(PluginLoader.java:91)
	at com.tngtech.archunit.core.PluginLoader$PluginSupplier.get(PluginLoader.java:74)
	at com.tngtech.archunit.thirdparty.com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:198)
	at com.tngtech.archunit.core.PluginLoader.load(PluginLoader.java:51)
	at com.tngtech.archunit.core.importer.ImportPlugin$Loader.loadForCurrentPlatform(ImportPlugin.java:40)
	at com.tngtech.archunit.core.importer.Locations.<clinit>(Locations.java:43)
	... 23 more
Caused by: java.lang.ClassNotFoundException: com.tngtech.archunit.core.importer.ModuleImportPlugin
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:327)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:297)
	at [email protected]/java.lang.Class.forName(DynamicHub.java:1708)
	at [email protected]/java.lang.Class.forName(DynamicHub.java:1654)
	at [email protected]/java.lang.Class.forName(DynamicHub.java:1641)
	at com.tngtech.archunit.core.PluginLoader$PluginSupplier.create(PluginLoader.java:85)
	... 28 more

Dominant language
Java
Stars
3.9k
Forks
350
Avg merge
1d 12h
Merged PRs (30d)
13

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from TNG/ArchUnit

All issues in TNG/ArchUnit

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.