自定义Maven依赖引入FXML JavaFX项目时出现类找不到错误求助
解决JavaFX Maven项目本地依赖类找不到问题
问题背景
我创建了一个实现两数求和的简单Maven项目,核心代码如下:
public class AddNum { public int getTwoNumbers(int x, int y) { int addnum = x + y; return addnum; } }
执行mvn clean install后,该项目jar包已安装到本地Maven仓库。随后在新的**FXML JavaFX Maven Archetype(Gluon)**项目的pom.xml中添加依赖:
<dependencies> <dependency> <groupId>com</groupId> <artifactId>mavenproject1</artifactId> <version>2.0-SNAPSHOT</version> </dependency> </dependencies>
并在main方法中调用该依赖:
public static void main(String[] args) { AddNum a = new AddNum(); System.out.println(a.getTwoNumbers(5, 10)); launch(); }
运行项目时出现java.lang.ClassNotFoundException: newpackage.AddNum错误,完整错误栈如下:
java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.NoClassDefFoundError: newpackage/AddNum at com.mycompany.testfx.App.main(App.java:36) ... 11 more Caused by: java.lang.ClassNotFoundException: newpackage.AddNum at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 12 more Exception running application com.mycompany.testfx.App Command execution failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404) at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166) at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:504) at org.openjfx.JavaFXBaseMojo.executeCommandLine (JavaFXBaseMojo.java:394) at org.openjfx.JavaFXRunMojo.execute (JavaFXRunMojo.java:100) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289) at org.apache.maven.cli.MavenCli.main (MavenCli.java:193) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:497) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404) at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166) at org.openjfx.JavaFXBaseMojo.executeCommandLine(JavaFXBaseMojo.java:504) at org.openjfx.JavaFXBaseMojo.executeCommandLine(JavaFXBaseMojo.java:394) at org.openjfx.JavaFXRunMojo.execute(JavaFXRunMojo.java:100) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289) at org.apache.maven.cli.MavenCli.main(MavenCli.java:193) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347) ------------------------------------------------------------------------ BUILD FAILURE ------------------------------------------------------------------------
错误分析
从错误栈可知,JVM找不到newpackage.AddNum类,核心原因包括:
- 依赖项目中
AddNum类的实际包名与调用时引用的包名不匹配 - JavaFX Maven插件未将本地依赖纳入运行classpath
- 本地仓库中安装的依赖jar包损坏或不完整
解决步骤
1. 核对包名一致性
- 检查依赖项目中
AddNum类的包声明:如果类开头有package newpackage;,调用时必须引入该包:import newpackage.AddNum; public static void main(String[] args) { AddNum a = new AddNum(); System.out.println(a.getTwoNumbers(5, 10)); launch(); } - 若
AddNum类无包声明(默认包),调用时不能加newpackage前缀,直接使用AddNum即可,同时确保依赖项目pom.xml的groupId、artifactId、version与调用项目的依赖配置完全一致。
2. 配置JavaFX Maven插件包含依赖
Gluon的JavaFX Maven Archetype使用org.openjfx:javafx-maven-plugin,默认可能未将本地依赖加入运行环境,需修改插件配置:
在pom.xml的插件节点添加以下内容:
<plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.8</version> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.mycompany.testfx.App</mainClass> <!-- 确保依赖模块被加载 --> <addModules> <module>com.mavenproject1</module> </addModules> </configuration> </execution> </executions> </plugin>
配置完成后执行mvn clean compile javafx:run重新运行项目。
3. 重新安装本地依赖
- 删除本地Maven仓库中对应依赖目录(通常路径为
~/.m2/repository/com/mavenproject1/2.0-SNAPSHOT) - 返回依赖项目,执行
mvn clean install重新生成并安装jar包 - 在调用项目中执行
mvn clean compile刷新依赖
4. 检查IDE依赖导入
若使用IDE开发:
- 右键项目 -> Maven -> Reload Projects,确保依赖被正确导入
- 查看Project Structure的Libraries,确认本地依赖jar已添加
验证解决
完成上述步骤后,重新运行mvn javafx:run,若控制台输出15,则问题已解决。
内容的提问来源于stack exchange,提问作者Kanishka
相关产品推荐
相关产品推荐

