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

目录

一、没有主清单属性

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

  • 解决方案一:手动修改MANIFEST.MF 文件配置
  1. 通过 7z 等压缩工具打开 jar 包

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

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

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

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

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

  • 解决方案二:使用插件并配置主函数

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

<project>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <!-- 配置jar包主函数 -->
                            <mainClass>com.zhiyin.screenshot.ScreenShotDemo</mainClass>
                        </manifest>
                    </archive>
                    <!-- jar包名称 -->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <!-- include标签存在但为空时不会默认构建目录下的配置文件 -->
                    <!--<include></include>-->
                </includes>
                <excludes>
                    <!-- 排除logs文件夹下的日志文件 -->
                    <exclude>logs/**</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
</project>

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

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

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

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

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

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

三、打包时未加入程序依赖包,导致程序启动报错

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

分析:因为是通过 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包名称 -->
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
            </plugins>
    
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <!-- include标签存在但为空时不会默认构建目录下的配置文件 -->
                        <!--<include></include>-->
                    </includes>
                    <excludes>
                        <!-- 排除logs文件夹下的日志文件 -->
                        <exclude>logs/**</exclude>
                    </excludes>
                </resource>
            </resources>
        </build>
    </project>
    
  2. 加入配置后,等待插件完成下载后,在项目的 Maven 窗口 Plugs 下就会出现

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

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

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

四、知识点

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

上一篇:特性


下一篇:Spring 的两个配置容器的讲解