Maven打包没有指定主类问题(xxx.jar中没有主清单属性)

 更新时间:2023年04月11日 08:58:12   作者:啊Abu  
这篇文章主要介绍了Maven打包没有指定主类问题(xxx.jar中没有主清单属性),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Maven打包没有指定主类

在使用IDEA开发项目的时候经常会遇到使用Maven打包项目(打成jar包或者zip包),但是之前不太清楚打包插件的使用,有时候会遇到在启动jar包的时候没有指定主类的错误(dd-1.0-SNAPSHOT.jar中没有主清单属性)。今天学习一下插件使用,写一个针对该问题的教程。

软件环境

  • IDEA:2017.1.5
  • Maven:3.3.9

打xxx.jar包(不包含依赖的jar包)

Maven可以不添加插件默认打jar包,但是如果想要修改默认的参数需要重新引入插件添加需要修改信息。

​ 1. 修改pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>demo.LoadDataMR</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

2.使用Maven工具打包

找到IDEA右边的【Maven Projects】->【项目名称】->【Lifecycle】

  • a. 先双击【clean】查看控制台(Run)是否出现BUILD SUCCESS
  • b. 然后双击【package】查看控制台(Run)是否出现BUILD SUCCESS
  • c. 在IDEA左边查看【Project】界面会出现【target】文件夹,打开文件夹会出现xxx.jar包说明已经构建完成。
  • ​d. 打开xxx.jar文件,在【META-INF/MANIFEST.MF】文件里面存在Main-Class: demo.LoadDataMR

打xxx-jar-with-dependencies.jar包

1. 修改pom.xml文件

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>demo.LoadDataMR</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
    <executions>
        <execution>
            <id>make-assemble</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2.使用Maven工具打包

找到IDEA右边的【Maven Projects】->【项目名称】->【Lifecycle】

  • a. 先双击【clean】查看控制台(Run)是否出现BUILD SUCCESS
  • b. 然后双击【package】查看控制台(Run)是否出现BUILD SUCCESS
  • c. 在IDEA左边查看【Project】界面会出现【target】文件夹,打开文件夹会出现xxx.jar包说明已经构建完成。
  • d. 打开xxx-jar-with-dependencies.jar文件,在【META-INF/MANIFEST.MF】文件里面存在Main-Class: demo.LoadDataMR

写在后面​

Maven插件配置的信息只能针对其生成的文件,在maven-jar-plugin插件设置的信息只会出现在xxx.jar包中,在maven-assembly-plugin插件设置的信息只会出现在xxx-jar-with-dependencies.jar包中

处理maven打包中没有主类启动的情况

第一步:在pom文件中添加

<!--解决maven打包问题-->
 
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.3</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Main-Class>
                              com.xxx.XXApplication
                            </Main-Class>
                        </manifestEntries>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/spring.schemas</resource>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

第二步 mvn:clean

第三步 mvn:package

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入了解Java数据结构和算法之堆

    深入了解Java数据结构和算法之堆

    这篇文章主要为大家介绍了Java数据结构和算法之堆 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Java DriverManager.getConnection()获取数据库连接

    Java DriverManager.getConnection()获取数据库连接

    这篇文章主要介绍了Java DriverManager.getConnection()获取数据库连接,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • java二维码生成的方法

    java二维码生成的方法

    这篇文章主要为大家详细介绍了java二维码生成的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Java 数组复制clone方法实现详解

    Java 数组复制clone方法实现详解

    这篇文章主要介绍了Java 数组复制clone方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java应用程序的CPU使用率飙升原因详细分析

    Java应用程序的CPU使用率飙升原因详细分析

    这篇文章主要介绍了Java应用程序的CPU使用率飙升原因详细分析,在 Java 中,我们使用 JVM 进行线程调度,所以一般来说,线程的调度有两种模式:分时调度和抢占式调度,线程和进程在阻塞或者等待时,都不会使用 CPU 资源,需要的朋友可以参考下
    2024-01-01
  • java实现追加内容到文件末尾的常用方法分析

    java实现追加内容到文件末尾的常用方法分析

    这篇文章主要介绍了java实现追加内容到文件末尾的常用方法,结合具体实例分析了java文件流及写入指针等相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Java Servlet 运行原理分析

    Java Servlet 运行原理分析

    这篇文章主要介绍了Java Servlet 运行原理分析,帮助大家更好的理解和学习Java Servlet的相关知识,感兴趣的朋友可以了解下
    2020-11-11
  • Java中synchronized的几种使用方法

    Java中synchronized的几种使用方法

    本文主要介绍了Java中synchronized的几种使用方法,synchronized可用于修饰普通方法、静态方法和代码块,下面详细内容介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Windows10系统下修改jar中的文件并重新打包成jar文件然后运行的操作步骤

    Windows10系统下修改jar中的文件并重新打包成jar文件然后运行的操作步骤

    这篇文章主要介绍了Windows10系统下修改jar中的文件并重新打包成jar文件然后运行的操作步骤,文中通过图文结合的形式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-08-08
  • MyBatis中的配置文件详解

    MyBatis中的配置文件详解

    在 MyBatis 中,配置文件分为 全局配置文件(核心配置文件)和映射配置文件,本文给大家介绍MyBatis中的配置文件相关知识,感兴趣的朋友一起看看吧
    2023-10-10

最新评论