idea普通maven项目打jar包运行异常,出现问题 “main“ java.lang.NoClassDefFoundError

背景

  • 非spring项目(打jar包会小很多)
  • 普通maven项目
  • 引用mybatis框架
  • 打jar包运行

问题

  • 打jar包,运行出现找不到类异常;// “main” java.lang.NoClassDefFoundError

解决思路

  1. 百度搜索关键字 >> idea maven jar 包含依赖
  2. 获得大约两个方案,主要采用maven-jar-plugin或maven-assembly-plugin
  3. maven-assembly-plugin方案多次测试,宣告失败。。
  4. maven-jar-plugin方案多次测试,宣告成功。

解决方案

步骤1 准备依赖包

  1. pom文件,注掉maven-jar-plugin的plugin相关
  2. pom文件,打开spring-boot-maven-plugin的plugin相关
  3. 执行>>idea–maven标签页–项目Lifecycle–clean–package
  4. 到target目录下,可看到生成的jar包,至少几兆的样子
  5. 右键压缩包方式打开jar包,查看目录**.jar\BOOT-INF\lib
  6. 复制lib目录到本地,备用
  7. 关键信息如下:

在这里插入图片描述

步骤2 准备jar包

  1. pom文件,打开maven-jar-plugin的plugin相关
  2. pom文件,注掉spring-boot-maven-plugin的plugin相关
  3. 执行>>idea–maven标签页–项目Lifecycle–clean–package
  4. 到target目录下,可看到生成的jar包,至多几十k的样子
  5. 右键压缩包方式打开jar包,查看文本**.jar\META-INF\MANIFEST.MF
  6. MANIFEST.MF文本至少需包含Class-Path/Main-Class项才算正常
  7. 关键内容如下

在这里插入图片描述
在这里插入图片描述

步骤3 使用说明

  • lib目录即jar包依赖包
  • 可将lib目录放至jar包同级目录即可正常启动jar
  • 或将jar包以压缩包方式打开,将lib目录复制到其一级目录,保存后jar包也可正常启动

文件pom关键信息

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <useUniqueVersions>false</useUniqueVersions>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.cintel.NxFileConsumer</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <!--打包成可执行jar-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.4.2.RELEASE</version>
                <configuration>
                    <fork>true</fork>
                    <mainClass>>com.cintel.NxFileConsumer</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


            <!--            <plugin>-->
<!--                <artifactId>maven-assembly-plugin</artifactId>-->
<!--                <version>3.1.1</version>-->
<!--                <configuration>-->
<!--                    <appendAssemblyId>false</appendAssemblyId>-->
<!--                    <descriptorRefs>-->
<!--                        <descriptorRef>jar-with-dependencies</descriptorRef>-->
<!--                    </descriptorRefs>-->
<!--                    <archive>-->
<!--                        <manifest>-->
<!--                            &lt;!&ndash; 此处指定main方法入口的class &ndash;&gt;-->
<!--                            <mainClass>com.xxx.uploadFile</mainClass>-->
<!--                        </manifest>-->
<!--                    </archive>-->
<!--                </configuration>-->
<!--                <executions>-->
<!--                    <execution>-->
<!--                        <id>make-assembly</id>-->
<!--                        <phase>package</phase>-->
<!--&lt;!&ndash;                        <goals>&ndash;&gt;-->
<!--&lt;!&ndash;                            <goal>assembly</goal>&ndash;&gt;-->
<!--&lt;!&ndash;                        </goals>&ndash;&gt;-->
<!--                    </execution>-->
<!--                </executions>-->
<!--            </plugin>-->

<!--            <plugin>-->
<!--                <groupId>org.apache.maven.plugins</groupId>-->
<!--                <artifactId>maven-assembly-plugin</artifactId>-->
<!--                <configuration>-->
<!--                    <archive>-->
<!--                        <manifest>-->
<!--                            <mainClass>com.cintel.NxFileConsumer</mainClass>-->
<!--                        </manifest>-->
<!--                    </archive>-->
<!--                    <descriptorRefs>-->
<!--                        <descriptorRef>jar-with-dependencies</descriptorRef>-->
<!--                    </descriptorRefs>-->
<!--                </configuration>-->
<!--            </plugin>-->

<!--            <plugin>-->
<!--                <groupId>org.apache.maven.plugins</groupId>-->
<!--                <artifactId>maven-assembly-plugin</artifactId>-->
<!--                <version>3.1.1</version>-->
<!--                <configuration>-->
<!--                    <appendAssemblyId>false</appendAssemblyId>-->
<!--                    <descriptorRefs>-->
<!--                        <descriptorRef>jar-with-dependencies</descriptorRef>-->
<!--                    </descriptorRefs>-->
<!--                    <archive>-->
<!--                        <manifest>-->
<!--                            <mainClass>com.cintel.NxFileConsumer</mainClass>-->
<!--                        </manifest>-->
<!--                    </archive>-->
<!--                </configuration>-->
<!--                <executions>-->
<!--                    <execution>-->
<!--                        <id>make-assembly</id>-->
<!--                        <phase>package</phase>-->
<!--                        <goals>-->
<!--                            <goal>repackage</goal>-->
<!--                        </goals>-->
<!--                    </execution>-->
<!--                </executions>-->
<!--            </plugin>-->

        </plugins>

    </build>

</project>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值