概述:起因是我用maven打包javafx出现找不到或无法加载主类
问题:
错误: 找不到或无法加载主类 com.example.liaotian.HelloApplication
原因: java.lang.NoClassDefFoundError: javafx/application/Application
这个问题我一开始没有看这个错误信息,就直接误以为是没有配置主类信息。
但其实不是的,因为我用的是java17,所以自然就没有携带javafx这些依赖。
总结:出现这种问题的原因只有两种情况,一个是没有配置主类,一个打包的时候没有把依赖加入进去
解决方案:加入以下插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.example.liaotian.HelloApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
这样子做了之后,就会出现
依赖被存到了lib文件夹里面了,再次运行此jar包,出现:
按道理,如果各位的项目不是javafx的话,就可以直接运行成功了。
至于javafx缺运行时组件的解决方案:可以参考以下文章。
【Java】错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序 的解决方案-CSDN博客
你们可能会说了,我依赖里面有javafx
为什么还会报这个错误,可能是因为maven为我们省下的活,这个项目即使我java17里面没有这些依赖,但是我们编译的时候用的是maven,maven里面有这些依赖,所以可以正常使用,但是java本身是没有这个javafx依赖的,当我们打包完了,用java里面的javafx去运行时,自然就会报错。希望大家明白这个道理。
当然你们也可以反驳我。