Springboot jar主清单属性丢失解决方案

在开发中,用到springboot项目,当打包后部署运行时,出现了这个问题,网上搜了好多,又是加META-INF配置,又是加啥的,感觉springboot这么方便,这种问题怎么可能会搞这么复杂,于是研究了一下:

首先我们项目要依赖springboot的parent或者引入spring-boot-dependencies

或者

这样就将springboot的pom文件导入了我们的项目,然后还要再要运行的jar包中写入插件:

当使用继承spring-boot-starter-parent时,就会出现标志,表示是继承自父类的,然后我们点到spring-boot-starter-parent的pom文件中,查看插件部分:

<plugin>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-maven-plugin</artifactId>
     <executions>
      <execution>
       <id>repackage</id>
       <goals>
        <goal>repackage</goal>
       </goals>
      </execution>
     </executions>
     <configuration>
      <mainClass>${start-class}</mainClass>
     </configuration>
    </plugin>
    <plugin>
     <artifactId>maven-shade-plugin</artifactId>
     <executions>
      <execution>
       <phase>package</phase>
       <goals>
        <goal>shade</goal>
       </goals>
       <configuration>
        <transformers>
         <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
          <resource>META-INF/spring.handlers</resource>
         </transformer>
         <transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
          <resource>META-INF/spring.factories</resource>
         </transformer>
         <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
          <resource>META-INF/spring.schemas</resource>
         </transformer>
         <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
          <mainClass>${start-class}</mainClass>
         </transformer>
        </transformers>
       </configuration>
      </execution>
     </executions>
     <dependencies>
      <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
       <version>2.1.12.RELEASE</version>
      </dependency>
     </dependencies>
     <configuration>
      <keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
      <createDependencyReducedPom>true</createDependencyReducedPom>
      <filters>
       <filter>
        <artifact>*:*</artifact>
        <excludes>
         <exclude>META-INF/*.SF</exclude>
         <exclude>META-INF/*.DSA</exclude>
         <exclude>META-INF/*.RSA</exclude>
        </excludes>
       </filter>
      </filters>
     </configuration>
    </plugin>

注意到里面有一个${start-class}变量,这个变量在parent的pom文件中并没有定义,那么我们就在自己要打jar包运行的模块定义这个变量:

然后再打包,就可以直接通过java -jar *.jar 运行项目了

如果不是继承自parnetxml,而是选择第一种,导入dependencies的方式:

那么就要改一下前面的spring-boot-maven-plugin插件,

我们需要指定打包路径的main方法,这样就可以直接打包通过 java -jar *.jar的方式运行了

重要的是一定要定义start-class变量

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springboot文件打包成jar或war的方法

    jar: pom.xml: <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </b

  • Linux编辑启动、停止与重启springboot jar包脚本实例

    前言 springboot的配置文件中,配置文件的名字都有各自的意义跟用途 dev 开发环境 prod 生产环境(默认) test 测试环境 加载指定配置文件 --spring.profiles.active=prod springboot加载jar包的方式有 // 直接在控制台进行启动,缺点就是控制台关闭项目也就关闭了. java -jar bootdo.jar // 这种方式可以运行在后台,但是如果推出了shell的话,那也会挂 java -jar /bootdo-2.0.0.jar > b

  • Springboot jar文件如何打包zip在linux环境运行

    这篇文章主要介绍了Springboot jar文件如何打包zip在linux环境运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.添加打包配置文件 1.1 assembly.xml <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2

  • Spring Boot jar中没有主清单属性的解决方法

    使用Spring Boot微服务搭建框架,在eclipse和Idea下能正常运行,但是在打成jar包部署或者直接使用java -jar命令的时候,提示了xxxxxx.jar中没有主清单属性: D:\hu-git\spring-xxx-xxx\target>java -jar spring-cloud-eureka-0.0.1-SNAPS HOT.jar spring-xxx-xxx-0.0.1-SNAPSHOT.jar中没有主清单属性 通过maven打jar包:mvn install, 或者在I

  • 为什么SpringBoot的jar可以直接运行

    SpringBoot提供了一个插件spring-boot-maven-plugin用于把程序打包成一个可执行的jar包.在pom文件里加入这个插件即可: <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>

  • springboot web项目打jar或者war包并运行的实现

    (一)springboot web项目打jar包 1.打包 两种打包方式 maven命令打包 切换目录到工程根下,pom.xml所在位置,运行maven的打包命令 mvn clean package -Dmaven.test.skip=true IDEA 工具执行maven任务打包 会在xxx项目模块下/target目录下生成xxx-0.0.1-SNAPSHOT.jar 2.运行jar包 启动运行(切换目录到target下,执行命令) F:\Java\idea-workspace\shixun0

  • SpringBoot项目没有把依赖的jar包一起打包的问题解决

    这篇文章主要介绍了SpringBoot项目没有把依赖的jar包一起打包的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一般未一起打包是因为pom不是继承自spring-boot-starter-parent导致的需要在pom.xml文件写入以下配置 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId>

  • 简单了解springboot的jar包部署步骤

    由于springboot常用war包部署,改为cloud开发模式多端口情况下,部署反而不习惯 毕竟,war包要不要项目名访问都必须放在tomcat的root目录下 而此目录限制只能放置一个项目,并且登录端口限制为tomcat的接口了 因此,jar包部署就成了必然的方式了 1.添加pom设置 静态文件需要访问,所以静态文件webapp下的文件需要重新指定位置,具体配置如下 <resource> <directory>src/main/webapp</directory>

  • Springboot jar主清单属性丢失解决方案

    在开发中,用到springboot项目,当打包后部署运行时,出现了这个问题,网上搜了好多,又是加META-INF配置,又是加啥的,感觉springboot这么方便,这种问题怎么可能会搞这么复杂,于是研究了一下: 首先我们项目要依赖springboot的parent或者引入spring-boot-dependencies 或者 这样就将springboot的pom文件导入了我们的项目,然后还要再要运行的jar包中写入插件: 当使用继承spring-boot-starter-parent时,就会出现

  • SpringBoot没有主清单属性的解决方法

    解决 SpringBoot 没有主清单属性 问题:SpringBoot打包成jar后运行提示没有主清单属性 解决:补全maven中的bulid信息 <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring.version}</version>

  • idea 打包的jar运行报 "XXX中没有主清单属性"

    使用idea2018打包了一个spring boot项目(打包为jar) 启动是报错如下: 错误原因 打包后的jar文件中的MANIFEST.MF缺少项目启动项,即没有Main-Class和Start-Class 如下: 解决方案如下 1.指定MANIFEST.MF路径 项目打包前 第一步 file–>project structure 弹框后选中Atifacts-> + ---->jar---->from module with dependenceis 第二步 选择一个Main

  • Maven 项目生成jar运行时提示“没有主清单属性”

    新建了一个Maven的项目,mvn compile和mvn package后生成了jar文件,然后直接到target目录下去执行java -jar xxx.jar命令运行jar包时出现了"xxx.jar没有主清单属性"的错误提示. 根据我的经验,肯定是没有找到入口类(即main函数所在的类),在pom.xml里面加上入口类的配置就好了!第一次直接用maven来打包jar,记录一下. 修改pom.xml文件,添加如下配置项即可: <build> <plugins>

  • IDEA 程序包不存在,找不到符号但是明明存在对应的jar包(问题分析及解决方案)

    环境 IntelliJ IDEA 2020.1 JDK1.8 前提概要 问题1和问题2其实是同一个问题,但是表现上有一点不一样 具体是如何引起该问题,尚不清楚,特此记录 问题1描述 一运行springboot启动类,就报一大堆jar报错idea Kotlin: Classpath entry points to a non-existent location:类路径条目指向不存在的位置 程序包不存在 找不到符号 本地仓库也不是存在这个位置,很疑惑 然后就去这个文件目录下找这个目录删除了.还是报这

  • Springboot mybatis plus druid多数据源解决方案 dynamic-datasource的使用详解

    依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>p6spy</groupId>

  • springboot jar包外置配置文件的解决方法

    为什么要搞个解决方案呢?按照网上教程,spring boot项目中,配置文件有优先级,其中,放在根目录下的config文件夹中优先级最高:根目录下次之:然后是resources/config/:resources/下优先级最低.而加载顺序刚好反过来,resources/下最先加载,而/config/最后加载.然后在命令行方式下,指定一下这个配置文件的路径,就可以了,云云. 也许事实就是如此的吧,但我试来试去,总不成功,系统死活都要读resources/下,这个优先级最低的配置文件. 这对于用 j

  • 解决@RequestBody部分属性丢失的问题

    目录 @RequestBody部分属性丢失 问题描述 JavaBean实现 Controller实现 postman接口请求展示 结论 springboot @RequestBody注入属性为空 对象属性为 我的解决办法 @RequestBody部分属性丢失 问题描述 JavaBean实现 public class VerifyNewFriendApplyReq implements Serializable { /** * 申请ID */ private Long applyId; /** *

  • SpringBoot JPA sort多属性排序实例

    目录 SpringBoot JPA sort多属性排序 导入jar包 代码示例 在Sping Boot项目中使用Sort排序时报错 可以改用Sort.by获得Sort对象 SpringBoot JPA sort多属性排序 在开发JPA中,遇见需要对数据进行多属性排序的情况,例如 select * from MldmasView order by vslName ASC,custName ASC,docDate DESC; 导入jar包 import org.springframework.dat

随机推荐