Maven打包本地jar包提示程序包xx.xx不存在,NoClassDefFoundError

Maven打包无法加载本地jar包,打包成功运行 jar 包提示 java.lang.NoClassDefFoundError


项目引用了本地jar包,如加密、私有协议等,未发布到 Maven 服务器,以 jar 包形式在项目中引用,正常开发时未出现问题,Maven 打包执行 mvn package 时提示 “程序包xx.xx不存在”。

在这里插入图片描述
原因是 scope 为 system 的 maven 打包默认是不打进 jar 包进去的。
需要修改 pom.xml 配置,把 jar 包以依赖形式加入 pom:

<dependency>
     <groupId>net.lx</groupId>
     <artifactId>testmv2</artifactId>
     <version>1.0</version>
     <scope>system</scope>
     <!--testmv2-1.0.jar 放在项目根目录下的 libs 文件夹-->
     <systemPath>${project.basedir}/libs/testmv2-1.0.jar</systemPath>
 </dependency>

同时在 plugin 中添加 includeSystemScope 标记:

<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
		<includeSystemScope>true</includeSystemScope>
	</configuration>
</plugin>

执行 mvn package 打包成功后,运行 java -jar testmv-1.0-SNAPSHOT.jar
提示 java.lang.NoClassDefFoundError: net/lx/test/EncTest。
在这里插入图片描述

需要在 pom.xml 中添加 maven-assembly-plugin 插件, 此插件可以将项目中的代码、资源和所有依赖包的内容打成一个程序集,可以指定打包结果是否包含外部资源和外部资源以什么形式存在。

assembly 插件配置,

<plugin>
	<artifactId>maven-assembly-plugin</artifactId>
	<configuration>
		<archive>
			<manifest>
				<!-- 指定程序入口类 -->
				<mainClass>com.zf.test1.Test1</mainClass>
			</manifest>
			<manifestEntries>
				<Class-Path>.</Class-Path>
			</manifestEntries>
		</archive>
	</configuration>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>single</goal>
			</goals>
			<configuration>
				<descriptors>
					<descriptor>assembly.xml</descriptor>
				</descriptors>
			</configuration>
		</execution>
	</executions>
</plugin>

assembly.xml 放在项目根目录

<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <!-- 默认的配置 -->
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
        <!-- 增加scope类型为system的配置 -->
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>system</scope>
        </dependencySet>
    </dependencySets>
</assembly>

再次执行 mvn package 打包成功,执行 java -jar xx.jar 正常运行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值