我写了一个处理docx文档的程序,打包后运行,报错
java.lang.ClassNotFoundException: org.apache.poi.xwpf.usermodel.XWPFDocument
这里的原因是因为所有依赖的jar包都没有被一块打包进去
我起初以为是没有找到这个类,可能是版本问题,或者是maven常见的丢失打包,于是我换版本、重新编译、clean,package,都没有解决问题,于是我解压了jar包,发现里面除了我写的两个Java类以外什么一个jar包都没有,搞了半个多小时才找到这个问题,是没有打包进去。
网上查找解决办法,大多用到了一个maven插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!-- bind to the packaging phase -->
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>main</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
先上xml文件的代码
我这个小项目,只有两个类,一个是文档处理类,一个是main类,所以
<mainClass>main</mainClass> 这里就是我的程序入口,
我找到的解决办法是没有 下面的元素的
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>main</mainClass>
</manifest>
没有加上这个元素之前,打包运行会出错
document-1.0-SNAPSHOT-jar-with-dependencies.jar中没有主清单属性
没有主清单属性,意思是没有找到程序入口,也就是main方法
所以加上了这个标签来指定我的main方法
如果你的是一个springboot项目,应该有所不同,可能是xx.xx.xxApplication(springboot自动生成的 application.java----带有@SpringbootApplication注解的)
下面加上一个小技巧,没难度--windows使用.bat脚本,点击执行jar包
这里其实没什么好说的,创建一个bat文件,写上要执行的命令
java -jar xxxxx.jar
保存,点击就可以执行,如果想要后台运行,用 javaw