背景
- 非spring项目(打jar包会小很多)
- 普通maven项目
- 引用mybatis框架
- 打jar包运行
问题
- 打jar包,运行出现找不到类异常;// “main” java.lang.NoClassDefFoundError
解决思路
- 百度搜索关键字 >> idea maven jar 包含依赖
- 获得大约两个方案,主要采用maven-jar-plugin或maven-assembly-plugin
- maven-assembly-plugin方案多次测试,宣告失败。。
- maven-jar-plugin方案多次测试,宣告成功。
解决方案
步骤1 准备依赖包
- pom文件,注掉maven-jar-plugin的plugin相关
- pom文件,打开spring-boot-maven-plugin的plugin相关
- 执行>>idea–maven标签页–项目Lifecycle–clean–package
- 到target目录下,可看到生成的jar包,至少几兆的样子
- 右键压缩包方式打开jar包,查看目录**.jar\BOOT-INF\lib
- 复制lib目录到本地,备用
- 关键信息如下:
步骤2 准备jar包
- pom文件,打开maven-jar-plugin的plugin相关
- pom文件,注掉spring-boot-maven-plugin的plugin相关
- 执行>>idea–maven标签页–项目Lifecycle–clean–package
- 到target目录下,可看到生成的jar包,至多几十k的样子
- 右键压缩包方式打开jar包,查看文本**.jar\META-INF\MANIFEST.MF
- MANIFEST.MF文本至少需包含Class-Path/Main-Class项才算正常
- 关键内容如下
步骤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>-->
<!-- <!– 此处指定main方法入口的class –>-->
<!-- <mainClass>com.xxx.uploadFile</mainClass>-->
<!-- </manifest>-->
<!-- </archive>-->
<!-- </configuration>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>make-assembly</id>-->
<!-- <phase>package</phase>-->
<!--<!– <goals>–>-->
<!--<!– <goal>assembly</goal>–>-->
<!--<!– </goals>–>-->
<!-- </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>