请根据实际情况跳转对应部分
一、将java项目打包为jar,以及遇到的问题
现在的java项目一般都是使用maven构建的,maven可以通过命令mvn package将项目打成一个jar包,或者在idea中右侧可以快速打包。
1.1.打包后使用jar -jar报错:java.lang.NoClassDefFoundError(分springboot和非springboot项目)
原因:注意打包后的文件大小,如果只有几百kb这种的,基本上可以确定有问题了。打包后使用jar -jar运行不起来,原因是只打了一个引用。我们项目中用到的maven依赖里面的jar包,我们是通过pom导入,下载到本地仓库中,但是你打包的时候如果不采取一些措施,他是不会帮你把外部的那些jar包也打到你的项目里面的,你运行起来肯定报一个叫java.lang.NoClassDefFoundError的异常,很简单,找不到你想用的jar包呗,所以你会发现,正常的jar包怎么着也得80多MB,怎么可能几kb。
解决方法:
1.如果是springboot工程,很简单,只需要在pom下安装一个插件:spring-boot-maven-plugin,他会帮你把你依赖的jar包给打到你生成的项目jar包里面,如下,复制到pom中:
<build>
<finalName>***(一般是项目名)</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
idea右侧会多一个插件:此时不管从spring-boot里面打包,还是用mvn的package打包,都可以打出正常大小且可以运行的包。
2.如果不是springboot程序,那么肯定不能使用spring-boot-maven-plugin插件了。我们需要手动指出,按以下步骤操作:
1.idea中:左上角 文件-》项目结构-》工件(列表第五项),如下
2.点击 “ + ”,选择第一项(jar),第二项(来自具有依赖项的模块),如下
3.这样设置即可,注意要选择一下“主类”,选择你程序的入口,就是main函数。(这就是springboot的好处了,人家能知道你程序的入口位置,所以那个插件才可以帮你完成这一切操作)
4.不出意外你会看到爆出来很多jar包,安全感满满。这些步骤绝对没问题,如果你发生了错误,看看是不是你pom文件、或者项目结构、设置等等没配好,正确jie如下:
5.接下来就可以生成jar包了,注意不要用maven打包了,选择idea-》左上角“构建(build)”-》选择构建工件,最后去上图的“输出目录”位置就可以找到你的jar包了,这个jar包不出意外肯定要大一些了,你可以解压一下这个jar包,会发现里面有了你项目中导入进来的依赖中的jar包文件。
1.2.java -jar运行jar包出现了“没有主清单属性”问题,其实是缺少“主类”
解决方法:如果你是springboot项目,加入了spring-boot-maven-plugin插件,那么应该不会出现这个问题,如果出现的话也比较好解决,修改之前配的spring-boot-maven-plugin插件如下:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>my.xxx.xxx.xxxapplication</mainClass>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
其实比起问题1.1解决方案里面配置的插件,就是多了一个《mainClass》,翻译过来不就是主类么,就是你的入口文件。
如果是非springboot项目,一般来说在配置完1.1的解决方法之后也不会出现该问题,因为你在配置工件时已经指定了主类的位置。
如果还不行的话,你可以配置如下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>my.xxx.xxx.xxxapplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
将jar变为可以执行的exe文件,看下一篇文章如何将java项目从打包到转为exe文件,再到任意电脑可执行的应用程序(每一步都明确其正确性,请放心查阅)下半集-CSDN博客