IDEA中利用MAVEN制作和打包普通可执行应用(非SprintBoot的WEB应用)
我使用IDEA也就半年,开发中常常会遇到一些问题,例如用IDEA编写普通的可执行程序;
之前使用Eclipse编写一个可执行的JAVA程序,然后导出打包,非常方便;
但是我呢,想在 IDEA 中用Maven做一个可执行程序,毕竟之前也没有在 Eclipse 中经常使用 Maven,所以遇到了一些问题
首先说 在 IDEA 中用Maven做一个可执行程序
具体你可以参考:
https://www.cnblogs.com/alexgl2008/articles/12204484.html
我按照上面的步骤,初步写好一个可以用Mybatis连接数据库的小程序,或者你自己百度
本文主要是讲有关打包的,一般来说打包基本步骤:
https://www.cnblogs.com/alexgl2008/articles/12205496.html
可是就是执行时,会出现提示“没有主清单属性”
其实说实话,我一开始就知道问题是错哪了,我主要想看看网上的解决方案;
我先说答案:
只要找到导出的包,用winrar解压,你可以看到主Jar文件中就有 META-INF 文件夹,进去可以看到 MANIFEST.MF ,其实这个就是引导JAR文件执行的引导文件;
很简单,你只要编辑这个文件,在第二行,加入:
Main-Class: com.####.####.####
上面的###是你对应的主程序类名称;
(如果你不会,先解压缩这个MANIFEST.MF文件,编辑完了,再覆盖回去即可)
覆盖后,直接执行,一切OK。
这种解决方案不是最终解决方案,原理其实就是MAVEN没有把这段话加入到 MANIFEST.MF文件中,网上的文章大多是以下两种:
第一种:
加入例如以下代码,主要是用 maven-jar-plugin ,我尝试过,对于我用IDEA制作的普通应用程序,不起作用
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-jar-plugin</artifactId> 4 <version>2.6<version> 5 <configuration> 6 <archive> 7 <manifest> 8 <mainClass>xx.xx.xx</mainClass> 9 </manifest> 10 </archive> 11 </configuration> 12 </plugin>
在 manifest 里面加入 <addClasspath>true</addClasspath> 也不行
还有一种,我也尝试过,还是不行;
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-shade-plugin</artifactId> 4 <version>1.2.1</version> 5 <executions> 6 <execution> 7 <phase>package</phase> 8 <goals> 9 <goal>shade</goal> 10 </goals> 11 <configuration> 12 <transformers> 13 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 14 <mainClass>XXXX.XXXX.XXXXX</mainClass> 15 </transformer> 16 </transformers> 17 </configuration> 18 </execution> 19 </executions> 20 </plugin>
直到我看到一个网友说:
注意不要放到main/java
目录下,否则打成的jar中META-INF/MANIFEST.MF不含有Main-Class信息
指定META-INF/MANIFEST.MF的路径为src下
我操,豁然开朗;
使用第一种配置打包,用WINRAR打开JAR看,MANIFEST.MF中,Main-Class 赤裸裸的出现在我面前了。
这一番折腾,太骚了。弄了快两个小时,才找到原因;
这算是 IDEA 的一个漏洞吧?