• 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 的一个漏洞吧?

  • 相关阅读:
    tensorflow源码解析之framework-shape_inference
    tensorflow源码解析之framework-function
    tensorflow源码解析之framework-device
    时间之外的往事
    字段初始值无法引用非静态字段、方法或属性“ ”
    第六期新人助跑感悟
    java volatile
    spring aop
    jvm类加载机制
    redis 集群 sharding策略
  • 原文地址:https://www.cnblogs.com/alexgl2008/p/12206262.html
Copyright © 2020-2023  润新知