JavaFX应用调用本地安装的Maven依赖时运行时抛出java.lang.NoClassDefFoundError问题求助
JavaFX应用调用本地安装的Maven依赖时运行时抛出java.lang.NoClassDefFoundError问题求助
大家好,我最近碰到一个很棘手的问题,想请教一下各位:
我正在开发一个JavaFX应用,用Maven管理所有依赖。其中有一个第三方JAR包是修改版的org.llrp.ltk RFID库,因为没有公开的Maven仓库,所以我把它本地安装到了自己的Maven仓库里。
目前来看,本地安装是没问题的:
- 我能确认这个依赖已经正确安装到本地仓库
- 项目编译完全正常,没有任何报错
- 用同一个项目里的标准
main()方法调用该依赖中的类时,代码运行得完美无缺
但是,当我在JavaFX应用的代码里调用这个依赖时,就出问题了!具体是点击某个按钮触发使用该依赖类的操作时,直接抛出了如下错误:
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/llrp/ltk/net/LLRPEndpoint at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... Caused by: java.lang.ClassNotFoundException: org.llrp.ltk.net.LLRPEndpoint at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ... 56 more
我的JavaFX应用平时运行都正常,只有触发那个按钮操作才会报错。启动应用用的是Maven插件命令:mvn javafx:run
下面是我pom.xml里的依赖配置(那个本地安装的库已经包含在内):
<dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>${javafx.version}</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.11.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <version>1.19.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>junit-jupiter</artifactId> <version>1.19.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>postgresql</artifactId> <version>1.19.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.3</version> </dependency> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.6.13.Final</version> </dependency> <!-- 这就是本地安装的库 --> <dependency> <groupId>org.impinj.reader</groupId> <artifactId>reader-impinj</artifactId> <version>10.34.0</version> </dependency> </dependencies>
还有pom.xml里的build插件配置:
<build> <plugins> <!-- Compiler plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>21</release> </configuration> </plugin> <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <configuration> <mainClass>com.example.App</mainClass> </configuration> <executions> <execution> <id>run</id> <configuration> <mainClass>com.example.App</mainClass> </configuration> </execution> <execution> <id>debug</id> <configuration> <mainClass>com.example.App</mainClass> <options> <option>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:8000</option> </options> </configuration> </execution> </executions> </plugin> </plugins> </build>
我使用的是Java 21 LTS和JavaFX 21,试过在pom的build部分添加一些额外的类路径配置,但问题还是没解决。有没有哪位大佬遇到过类似的情况,能给我一些排查思路或者解决方案吗?
内容来源于stack exchange
相关产品推荐
相关产品推荐

