环境信息如下:

  • OS: CENTOS 7
  • Tomcat : 9.0.46
  • SpringBoot: 2.3.12.RELASE
  • Build JDK: 1.8.0_261
  • Runetime JDK : openjdk 1.8.0_362

1 “Error: Could not find or load main class CLASS xxxx” 异常的排查步骤

Step1 确保JDK/JRE及相关环境变量配置有效

配置 Java 环境变量的步骤:

> vi /etc/profile
JAVA_HOME=/usr/local/java/jdk1.8.0_231
JRE_HOME=/usr/java/jdk1.8.0_151/jre
# CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH > source /etc/profie

2 "no main manifest attribute"异常的排查步骤

问题现象

使用命令启动应用程序nohup java -jar xxx.jar &java -cp xxx.jar cn.xx.XXBizApplication时,报"no main manifest attribute"错误

问题分析

no main manifest attribute 即:找不到主类

首先需考虑:

  • 是不是类路径存在配置错误发生变化,自己没有及时修正;

[情况1] 若启动方式为nohup bin/bootstrap >> logs/console.log 2>&1 & 方式启动时,重点排查:

  • 检查bootstrap脚本中的CLASSPATH是否包含全了 所需的 LIB 包,且包名是否正确?
  • 检查CLASS-Path 对应的JAR包是否存在、且包名一一对应无偏差?
  • 检查bootstrap脚本中的启动类的类路径是否遗漏、正确?

bootstrap脚本一般在pom.xml中配置完成后,由maven打包插件org.codehaus.mojo:appassembler-maven-plugin自动生成

[情况2] 若启动方式为 nohup java -jar xxx.jar &java -cp xxx.jar cn.xx.XXBizApplication 方式启动时,重点排查:

查看 目标 JAR 包的 META-INF/MANIFEST.MF、或 BOOT-INF/MANIFEST.MF 中 :

一般情况下,java 打包成 jar 包需要在  MANIFEST.MF 中指定 Main-Class 项,以便运行 java -jar xxx.jar 时找到对应的主类。
因为-jar的含义就是后面跟的jar包是有main class可独立运行,所以需要在打包成jar包时指定这个类;否则,需要在执行的时候手动指定。
  • 检查Class-Path 是否包含全了 所需的 LIB 包,且包名是否正确?
  • 检查CLASS-Path 对应的JAR包是否存在、且包名一一对应无偏差?
  • 检查Main-Class(启动类) 是否遗漏、正确?

解决方法

对症下药,切忌不经思考就采取如下手段!

情况1:启动手动指定引导启动类

  • 在运行jar包时,使用 -cp / --classpath 来手动指定
java -cp xxx.jar {cn.yy.xxx.引导启动类名}

情况2:打包时,pom.xml的打包插件中配置Main-Class

  • 方法1:打包插件org.springframework.boot:spring-boot-maven-plugin
    <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <executions>
<execution>
<phase>package</phase>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions> <configuration>
<includeSystemScope>true</includeSystemScope>
<mainClass>cn.api.ProviderApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
  • 方法2:打包插件org.springframework.boot:spring-boot-maven-plugin

3 java / jar 命令

3.1 解压JAR包

  • 方法1 解压到当前目录

注意: 不会创建一个 game 文件夹,而是将所有jar包的内容全部解压到当前文件夹

jar -xvf project.jar
  • 方法2 tar
tar -xvf xx.jar

# TAR 解压: 解压压缩文件到指定目录
tar -xvf <dirName/compressedFile>.jar -C <targetDir>
tar -xvf <dirName/compressedFile>.tar.gz -C <targetDir>

3.2 指定目录下的文件打成JAR包

  • 把指定目录下的所有文件打包成JAR包
jar -cvfM0 project.jar ./
  • -c 创建jar包

  • -v 显示过程信息

  • -f

  • -M

  • -0 阿拉伯数字,只打包不压缩之意

  • 将当前目录下的所有文件打包,并放至上一级目录下

jar -cf ../xx.jar ./*

3.3 查看 jar 包的内容

使用 t 选项可以查看 test.jar 中的内容

`` shell

[root@linux ~]# jar tvf test.jar # 在 test.jar



# 3 `unzip` 命令
`unzip`命令用于解压缩由`zip`命令压缩的“`.zip`”压缩包,也可用来解压`jar包` > 详情参见:
> + [[Linux]常用命令之【tar/zip/unzip/gzip/gunzip】 - 博客园/千千寰宇](https://www.cnblogs.com/johnnyzen/p/13732348.html#_label1) 【推荐】 ## CASE1 解压zip包到指定目录下

unzip -o xxx.zip -d tmp/


# Y 推荐文献
+ [[Linux]常用命令之【tar/zip/unzip/gzip/gunzip】 - 博客园/千千寰宇](https://www.cnblogs.com/johnnyzen/p/13732348.html#_label1) 【推荐】
+ [打包运行报no main manifest attribute, in XXXX的解决办法 - 博客园](https://www.cnblogs.com/juanxincai/p/13385339.html) 【推荐】
+ [JDK 命令之 jar -- 压缩/解压缩工具 - CSDN](https://blog.csdn.net/liaowenxiong/article/details/117354856) 【推荐】
+ [jar -cf 命令 - CSDN](https://blog.csdn.net/learnalwaystodie/article/details/120423641)
+ [java -jar命令详解 - CSDN](https://blog.csdn.net/shenxiaomo1688/article/details/127319133) 【推荐】 # X 参考文献
+ [Error: Could not find or load main class CLASS的解决方法 - CSDN](https://blog.csdn.net/taw19960426/article/details/102731592) 【推荐】
+ [由于“输入行太长”而在Windows上运行.bat文件时出 - ORcode](https://www.orcode.com/question/334154_k9388b.html)
+ [maven:用appassembler-maven-plugin打包含有自定义目录的JAVA程序 - 博客园](https://www.cnblogs.com/huiy/p/6169614.html)
+ http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html 【推荐】
+ [maven-compiler-plugin 插件详解 - CSDN](https://blog.csdn.net/Java_1710/article/details/120992614)
+ [appassembler-maven-plugin详解 - jianshu](https://www.jianshu.com/p/26332c0c5d92)
+ [maven-resources-plugin的copy文件使用 - CSDN](https://blog.csdn.net/kaige8312/article/details/111289209)
+ [启动jar文件,报”no main manifest attribute“异常 - CSDN](https://blog.csdn.net/weixin_43980975/article/details/118003575)
+ [jar运行报错no main manifest attribute - CSDN](https://blog.csdn.net/qq_33697094/article/details/110549536) 【不推荐】
+ [使用unzip解压jar包和jar包的打包方法 - CSDN](https://blog.csdn.net/itKingOne/article/details/78666402)

[Java EE]SpringBoot/Tomcat之启动时报"Error: Could not find or load main class CLASS xxxx"、"no main manifest attribute"异常的更多相关文章

  1. springboot 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration.pageableCustomizer

    springboot +gradle 配置jpa启动报Error processing condition on org.springframework.boot.autoconfigure.data ...

  2. JavaWeb学习----JSP简介及入门(含Eclipse for Java EE及Tomcat的配置)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  3. 配置Java EE Eclipse+Tomcat开发环境

    以下将详细介绍在Eclipse下搭建Java EE开发环境的每一步, 环境:Win 7 + JDK 1.7 + Eclipse IDE for Java EE Developers 3.7 +Tomc ...

  4. 【转】eclipse for java ee的tomcat配置(常见问题解决)

    原文:http://blog.csdn.net/lanzhizhuxia/article/details/8087709 前一段时间准备学习ssh的源码,但是web开发的环境一直没有弄好,myecli ...

  5. 转 四大Java EE容器(Tomcat、JBoss、Resin、Glassfish)之简单比较

                                      现在流行的Java EE容器有很多:Tomcat.JBoss.Resin.Glassfish等等.下面对这四种Java EE容器进行 ...

  6. 四大Java EE容器(Tomcat、JBoss、Resin、Glassfish)之简单比较

    转自:http://www.cxybl.com/html/bcyy/java/201106241007.html 现在流行的Java EE容器有很多:Tomcat.JBoss.Resin.Glassf ...

  7. Azkaban无法启动错误Error: Could not find or load main class 12321

    1 错误日志 Using Hadoop from /mnt/software/hadoop-2.6.0-cdh5.16.1 bin/internal/../.. /mnt/software/jdk1. ...

  8. idea 启动时报 error:java 无效的源发行版

    说白了就是编译的版本不符合,有的地方是jdk1.7 有的地方是jdk1.8 所以你只要每个地方都保持一致就行. 每个地方!! 每个地方!! 每个地方!! 重要的设置说三遍! 以jdk1.7为例 fil ...

  9. idea 启动时报 error:java 无效的源发行版11

    编译的版本不符合,需要修改统一 

  10. IntelliJ IDEA 创建web项目后添加Java EE (Tomcat)的依赖包

    本文讲述的是IntelliJ IDEA 12版本 如果在编译器中创建一个web项目后,没有设置tomcat的依赖包,就不能成功的编译,会缺少javax.servlet.*等类. 添加的方法是: 打开p ...

随机推荐

  1. nodejs的框架koa

    koa:应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的 应用程序: 1.导入 const Koa = require('koa'); 2.创建koa的app实例 const ...

  2. maven工程入门

    1. 为什么要使用maven? 毕业开始工作,项目组用的maven-spring开发的,不得不了解一下,看过很多介绍,其中maven最大的特点就是 管理jar包和版本管理 (参考:https://ww ...

  3. Lenovo Vantage 完全卸载

    Lenovo Vantage 完全卸载 我的T480,最近因为在休眠状态下断电导致不开机,按开机键所有灯闪烁.翻阅百度发现居然是通病,自从 type-c 供电方案以来就有,无奈只有被奸商坑了350,只 ...

  4. 2.20 Q_Learning 和Sarsa 的区别

    二者都是基于Qtable的算法,其中Qlearning属于off-policy,Sarsa属于on-policy. 算法伪代码: 二者主要区别是更新Qtable的方式不同:

  5. PASS模型小程序设计阶段-里程碑第三组

    班级网址 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus/zjcsxy/SE2020/ ...

  6. Hadoop 从 hdfs 中拷出文件权限不够

    问题:使用-get命令从hdfs中拷出文件时,提示权限不够,如下: 分析: 可能有三方面原因: hdfs 中的文件或文件夹 没有读取权限: hdfs 的配置中未允许拷出文件: linux 文件夹没有写 ...

  7. ABP vNext微服务架构详细教程——分布式权限框架

    1.简介 ABP vNext框架本身提供了一套权限框架,其功能非常丰富,具体可参考官方文档:https://docs.abp.io/en/abp/latest/Authorization 但是我们使用 ...

  8. 面试-JVM

    1.java内存模型 / java运行时数据区模型? 元空间属于本地内存 而非JVM内存 内存模型 程序计数器 1.作为字节码的行号指示器,字节码解释器通过程序计数器来确定下一步要执行的字节码指令,比 ...

  9. QImageReader(Writer)支持格式变少的解决方法

    首发于我的个人博客:xie-kang.com 博客内有更多文章,欢迎大家访问 原文地址 获取程序支持的图片格式: #include "mainwindow.h" #include ...

  10. 如何加密一个sheel脚本!

    脚本写完后,如果要发布给其它人使用的话,可能会因安全原因而受阻,特别是脚本中包含密码等原因,而对脚本加密则可以解决此问题,本文提供了CentOS7/8环境下,加密shell脚本需要安装的程序和方法. ...