zl程序教程

您现在的位置是:首页 >  后端

当前栏目

IDEA中利用MAVEN制作和打包普通可执行应用(非SprintBoot的WEB应用)

2023-09-14 08:58:31 时间

我使用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 的一个漏洞吧?