今天在学习的过程中遇到一个问题调试了好久,最终解决了。来记录一下。
问题描述:一个普通的javase的程序,使用maven构建。最终项目完成后使用IDE(我用的是IDEA)可以运行,但是生成的jar包没办法直接java -jar通过命令行运行。
原因:maven自带的package插件生成的jar包是不带依赖包的,可以通过解压缩软件打开它生成的默认jar包,发现它只有pom.xml文件,而没有真正的依赖包。所以问题就是java -jar命令找不到依赖包中的类,所以报ClassNotFoundException。
解决的办法:
在pom.xml文件中的插件部分加入下面的插件
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>*****</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
这里的<mainClass>*****</mainClass>
中填入运行的主类的全限定名(包+类)。
然后要通过命令行运行:mvn assembly:assembly 之前一直使用IDEA自带的package插件直接打包,发现每次生成的还是默认的jar包。所以一定要用命令行自己输入。会发现在target文件中会生成两个文件,其中一个以
jar-with-dependencies为后缀的就是完整包含依赖包的jar包,可以直接通过命令行的java -jar运行。