I’m migrating from Spring Boot to Micronaut framework. As of now it’s been pretty smooth transition, but now I have a small concern that I’ve been stuck for a while.
I’m using TinyRadius-netty lib in order to send/receive RADIUS packets via my app. After migration my app logs following error:
Caused by: java.lang.ExceptionInInitializerError: null
at org.tinyradius.core.dictionary.parser.DictionaryParser.parseDictionary(DictionaryParser.java:38)
at com.example.connector.radius.impl.RadiusDictionaryHolder.init(RadiusDictionaryHolder.java:27)
at com.example.connector.radius.impl.$RadiusDictionaryHolder$Definition.initialize(Unknown Source)
at com.example.connector.radius.impl.$RadiusDictionaryHolder$Definition.instantiate(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2332)
... 42 common frames omitted
Caused by: java.lang.UnsupportedOperationException: No class provided, and an appropriate one cannot be found.
at org.apache.logging.log4j.LogManager.callerClass(LogManager.java:585)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:610)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:597)
at org.tinyradius.core.dictionary.parser.ResourceParser.<clinit>(ResourceParser.java:22)
... 47 common frames omitted
It’s seems to be some minor dependency problems, but so far I couldn’t find resolution for this.
In project I’m using logback as logger implementation. I used same earlier with Spring Boot and there was no problems.
That’s my parent POM:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.micronaut.platform</groupId>
<artifactId>micronaut-parent</artifactId>
<version>4.3.7</version>
</parent>
<groupId>com.example</groupId>
<artifactId>radius-tool</artifactId>
<version>1.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>radius-tool</name>
<description>Demo</description>
<modules>
...
</modules>
<properties>
<package.name>radius-app</package.name>
<jdk.version>19</jdk.version>
<java.version>19</java.version>
<release.version>19</release.version>
<micronaut.version>4.3.7</micronaut.version>
<micronaut.aot.enabled>false</micronaut.aot.enabled>
<micronaut.aot.packageName>com.example.aot.generated</micronaut.aot.packageName>
<micronaut.runtime>netty</micronaut.runtime>
<exec.mainClass>com.example.app.Application</exec.mainClass>
...
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- Uncomment to enable incremental compilation -->
<!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->
<annotationProcessorPaths combine.self="override">
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject-java</artifactId>
<version>${micronaut.core.version}</version>
</path>
<path>
<groupId>io.micronaut.serde</groupId>
<artifactId>micronaut-serde-processor</artifactId>
<version>${micronaut.serialization.version}</version>
<exclusions>
<exclusion>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject</artifactId>
</exclusion>
</exclusions>
</path>
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-graal</artifactId>
<version>${micronaut.core.version}</version>
</path>
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-validation</artifactId>
<version>${micronaut.core.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-Amicronaut.processing.group=com.example</arg>
<arg>-Amicronaut.processing.module=radius-tool</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
...
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<scope>compile</scope>
</dependency>
...
</dependencies>
</project>
That’s my POM where Micronaut app starts (main):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>radius-product</artifactId>
<version>1.0.1-SNAPSHOT</version>
</parent>
<artifactId>radius-product</artifactId>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>io.micronaut.maven</groupId>
<artifactId>micronaut-maven-plugin</artifactId>
<configuration>
<configFile>aot-${packaging}.properties</configFile>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven.assembly.plugin.version}</version>
<configuration>
<descriptors>
<descriptor>src/assembly/dep.xml</descriptor>
</descriptors>
<finalName>radius-app-${project.version}</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>create-archive</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>${package.name}-${project.version}</finalName>
</build>
</project>
What I tried:
- exclude log4j dep from tinyradius:
<dependency>
<groupId>com.globalreachtech</groupId>
<artifactId>tinyradius-netty</artifactId>
<version>${tinyradius.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
- move to log4j from logback implementation
My current observations:
- problem hasn’t occurred on Spring Boot
- problem is not occurring when running inside IDE (IDEA)
Any suggestions will be much appreciated!