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

摘要:
目录1.错误报告:xxx.jar中没有主列表属性。方法1.手动修改MANIFEST的配置。MF文件。方法2.使用插件并配置主功能。错误报告:Invalidorcorruptjarfilexxx。罐子分析。3.错误报告:java.lang.NoClassDefFoundError分析和解决方案。4.知识点1.错误报告:xxx.jar中没有主列表属性。方法1.手动修改MANIFEST的配置。MF文件。通过7z和其他压缩工具打开jar包

目录

一、报错: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

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

分析

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

三、报错:java.lang.NoClassDefFoundError

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

分析

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

解决

借助于 Maven 插件完成

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

    注意标签的嵌套

    <project>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <archive>
                            <manifest>
                                <!-- 配置jar包主函数 -->
                                <mainClass>com.zhiyin.screenshot.ScreenShotDemo</mainClass>
                            </manifest>
                        </archive>
                        <!-- 生成的包含依赖jar的jar包名称 -->
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
  2. 加入配置后,等待插件完成下载后,在项目的 Maven 窗口 Plugs 下就会出现

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

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

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

四、知识点

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

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

免责声明:文章转载自《Maven 项目打包及启动时的报错解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 集合之Dictionary详解AUC指标之ROC曲线只有一个点的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

DEP(数据执行保护)介绍

数据执行保护是一组软件和硬件技术,可以对内存执行额外检查,以帮助防止恶意代码在系统上运行。硬件实现DEP来检测从这些位置运行的代码,并在发现执行时抛出异常。此功能也称为非执行和执行保护。为了与DEP合作,AMD和微软共同设计并开发了AMD的新芯片功能“增强病毒防护”。[1] DEP的安全机制,即“数据执行保护”,是一种Windows安全机制,主要用于防止病毒...

influxdb简单使用

之前对influxdb有一个简单的了解和入门的使用,近期由于想使用influxdb做一点东西玩玩,又要捡起influxdb。而在influxdb下没有细分的表的概念,influxdb下的表在插入数据库的时候自动会创建。更多用户权限设置可以参看官方文档:https://docs.influxdata.com/influxdb/v1.0/query_langua...

DD-wrt+Wiwiz搭建私人免费(收费)WiFi认证页面+详细的操作教程

因此,请选择正确的DD-WRT版本将无线路由器连接到Internet。执行以下命令:#cd;wgethttp://dl.wiwiz.com/hsbuilder-util-latest-DD-WRT.tar.gz#cd/jffs ; tar zxf/tmp/root/hsbuilder-util-lalatest-DD-WRT.tar。gz#/jffs/usr...

VMP加壳(三):VMP壳爆破实战-破解某编辑类软件

同时,记住在内存视图中向VMP0段提供断点后继续单击确认按钮,以查看调用方法的位置(此处的返回地址为0x5E01E9),但此处返回push(或vm条目)。这个地方会是验证码检测的入口吗!通过字符串查找各种键提示(sn、不正确注册等)的内存:通过访问断点查找键代码,然后找出调用该函数的函数,这与JCC指令的距离更远。...

【01】如何在XMind中排列自由主题

如何在XMind中安排免费主题。在XMind思维导图软件中,用户可以根据需要添加免费主题。然而,由于自由主题的灵活性,它并不整洁,与需要控制界面有序排列的用户相比,这会造成一定的麻烦。首先选择要组织的所有免费主题,单击,然后在下拉框中选择以安排免费主题。有六种排列方式:左对齐、垂直居中、右对齐、顶部对齐、水平居中和底部对齐。...

Revit导入lumion渲染

利用Revit导出DAE文件格式插件,可以将Revit模型导入到lumion中进行图片渲染和漫游动画的制作。lumion强大的漫游功能,丰富的附加组件,绚丽的视频特效。lumion没有建模功能,但是Revit建模的没有统一的标准,导致一些不该同样的材质的地方,无法更改;如果有统一的标准,那么Revit结合lumion能做出任何想要的效果。Revit13版本能...