Maven打包没有指定主类问题(xxx.jar中没有主清单属性)
作者:啊Abu 发布时间:2023-11-26 21:34:44
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
来源:https://blog.csdn.net/branwel/article/details/102528659


猜你喜欢
- 一、注解是什么Java 注解用于为 Java 代码提供元数据,看完这句话也许你还是一脸懵逼,用人话说就是注解不直接影响你的代码执行,仅提供信
- AutoCompleteTextView是一个具有自动补全功能的EditView,当用户输入数据后,AutoCompleteTextView
- public class MainActivity extends Activity { @Override protected void
- 一、前言在学习分治算法之前,问你一个问题,相信大家小时候都有存钱罐的经历,父母亲人如果给钱都会往自己的宝藏中存钱,我们每隔一段时间都会清点清
- 高并发访问时,缓存、限流、降级往往是系统的利剑,在互联网蓬勃发展的时期,经常会面临因用户暴涨导致的请求不可用的情况,甚至引发连锁反映导致整个
- 先来看看效果:一、添加依赖库的步骤1.项目的gradle文件内的做以下改动allprojects { repositories
- Eureka注册的服务之间互相调用1.请求方启动类添加注解,扫描Eureka 中的全部服务@SpringBootApplication@En
- 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求。Java有原生的API可用于发送HTTP请求,即
- 1、CountDownLatch:一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。2、ThreadPoolE
- 异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Ja
- 前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢?int a = 1;double b = a;Console.Wr
- 当一个应用在后台执行时,前台界面就不会有什么信息,这时用户根本不知道程序是否在执行、执行进度如何、应用程序是否遇到错误终止等,这时需要使用进
- 概述从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.队列队列 (Queue) 遵循先进先出的原则 (Firs
- 我们讲一下Criteria查询,这个对于不是太熟悉SQL语句的我们这些程序员来说是很容易上手的。 废话不多说,看一下例子:&nbs
- 配置文件中设置通常在公司级别的项目中,我们可能会写多个application- dev/prod.yml ,然后我们通常会在applicat
- dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有
- scheduleAtFixedRate(task,time,period)task-所要安排的任务 time-首次执行任务的时间 perio
- Dubbo作为国内最出名的分布式服务框架,是Java程序员必备必会的框架之一,更是中高级测试面试过程中经常会问的技术,无论你是否用过,你都必
- 系列文章已完成,目录如下:jdk-logging log4j logback日志系统实现机制原理介绍commons-lo
- 实现窗口小部件,访问手机储存卡指定目录中的图片文件,然后随机选择一张在窗口的小部件中显示。图片路径使用List存储,适合初级Android学