Maven 项目打包及启动时的报错解决

目录
  • 一、报错:xxx.jar中没有主清单属性
    • 方式一、手动修改MANIFEST.MF 文件配置
    • 方式二、使用插件并配置主函数
  • 二、报错:Invalid or corrupt jarfile xxx.jar
    • 分析
  • 三、报错:java.lang.NoClassDefFoundError
    • 分析
    • 解决
  • 四、知识点

一、报错:xxx.jar中没有主清单属性

Maven 项目打包及启动时的报错解决_第1张图片

方式一、手动修改MANIFEST.MF 文件配置

  1. 通过 7z 等压缩工具打开 jar 包

    Maven 项目打包及启动时的报错解决_第2张图片

  2. 修改 META-INF 目录中的 MANIFEST.MF 文件(选中文件后右键选择编辑而不是打开)

    Maven 项目打包及启动时的报错解决_第3张图片

  3. 在原有内容的末尾加上一行:

    上图为已经操作过的结果

    Main-Class: com.zhiyin.screenshot.ScreenShotDemo(全限定名,不加后缀)
    
    • 键值之间必须用英文冒号隔开,并且必须后接一个(仅有一个)空格

    • 修改文件后记得保存,同时压缩工具会提醒是否更新压缩文件,选择(选择否时修改不生效,该报错还报错)

方式二、使用插件并配置主函数

  1. pom.xml 配置文件中加入以下配置(注意标签的嵌套)

    参考后续 pom.xml 配置文件中的主函数配置

  2. 待下载完成插件后,在项目的 Maven 窗口的 Plugins 下即可找到 assembly 插件(如果没有请刷新)

    Maven 项目打包及启动时的报错解决_第4张图片

  3. 使用 assembly:assembly 完成项目的打包

二、报错:Invalid or corrupt jarfile xxx.jar

分析

使用步骤 1 中修改 MANIFEST.MF 文件的方式来设置主函数时是否配置正确,键和值之间是否有英文冒号加空格,且英文和符号必须全为半角状态

三、报错:java.lang.NoClassDefFoundError

Maven 项目打包及启动时的报错解决_第5张图片

分析

因为是通过 IDEA 中 Maven 项目的 Lifecycle 中的 package 操作完成打包的,所以该命令默认是不会把依赖的 jar 包构建到 target 中,导致程序启动时找不到类报错

解决

借助于 Maven 插件完成

  1. pom.xml 文件中加入配置

    注意标签的嵌套

    
        
            
                
                    maven-assembly-plugin
                    
                        
                            
                                
                                com.zhiyin.screenshot.ScreenShotDemo
                            
                        
                        
                        
                            jar-with-dependencies
                        
                    
                
            
        
    
    
  2. 加入配置后,等待插件完成下载后,在项目的 Maven 窗口 Plugs 下就会出现

    Maven 项目打包及启动时的报错解决_第6张图片

  3. 通过 assembly 插件进行打包的操作后,再进入到 target 目录中,会发现多出一个 descriptorRef 标签中的指定名称的 jar 包,打开 jar 包时会发现依赖的 jar 的也在其中

    Maven 项目打包及启动时的报错解决_第7张图片

四、知识点

  • 全限定名:包名 + 类名(不包括类的后缀名),包与包之间,包与类之间的层级关系用 . 表示,包的最顶层为程序中的源代码目录,Maven 项目中则为 Sources Root 下的包

  • 使用 assembly 插件进行打包操作时,会在 target 目录中生成两个 jar 包,一个为默认的 jar 包,一个为包含了程序依赖 jar 包的 jar 包

你可能感兴趣的:(Maven 项目打包及启动时的报错解决)