#Maven 编译的jar报NoClassDefFoundError解决

来源:互联网 发布:一个简单的c语言程序 编辑:程序博客网 时间:2024/06/03 10:05

用Maven构建的项目,引入了第三方jar包,用mvn package打包后,执行java -cp <target/jar-file> <main-class> 后报错NoClassDefFoundError。

方案1

修改pom.xml文件,在标签<build><plugins>下新增两个个配置,把依赖的jar包拷贝到build的目录,并添加classpath,如下:

      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-jar-plugin</artifactId>        <version>2.3.2</version>        <configuration>          <archive>            <manifest>              <addClasspath>true</addClasspath>              <classpathPrefix>lib/</classpathPrefix>              <mainClass>com.mycmp.demo.Main</mainClass>            </manifest>          </archive>        </configuration>      </plugin>      <plugin>        <groupId>org.apache.maven.plugins</groupId>        <artifactId>maven-dependency-plugin</artifactId>        <executions>          <execution>            <id>copy</id>            <phase>package</phase>            <goals>              <goal>copy-dependencies</goal>            </goals>            <configuration>              <outputDirectory>                ${project.build.directory}/lib              </outputDirectory>            </configuration>          </execution>        </executions>      </plugin>

如上修改完成后,执行mvn package构建的jar包,再执行
java -cp <target/jar-file> <main-class>不在报NoClassDefFoundError错

方案2

修改pom.xml文件,在标签<build><plugins>下新增两个个配置,把所有依赖的jar包打包到build的jar包里面,实现零依赖,如下:

      <plugin>        <artifactId>maven-assembly-plugin</artifactId>        <configuration>          <archive>            <manifest>              <mainClass>com.mycm.demo.Main</mainClass>            </manifest>          </archive>          <descriptorRefs>            <descriptorRef>jar-with-dependencies</descriptorRef>          </descriptorRefs>        </configuration>      </plugin>

如上修改完成后,执行mvn assembly:assembly构建的jar包,再执行
java -cp <target/jar-file> <main-class>不在报NoClassDefFoundError错

结论

1.方案1是需要依赖外部jar包,只是通过配置来处理classpath
2.方案2是把依赖包一起打包到目标jar包里面,生成的jar比较大

0 0
原创粉丝点击