今天使用java -cp出现NoClassDefFoundError,研究半天打开jar后发现原来没有将依赖包打入
原文:https://blog.csdn.net/xb12369/article/details/79966633
最近在改造底层一个utils项目的时候,再将lib工程转maven项目后,打包丢了相关依赖;
之前lib工程的时候是需要借助第三方fatjar的,现在转maven后相关依赖全部丢失;
基于当前工程已经被很多项目引用,这里谋求一个新的出路,希望用maven插件也能将相关依赖打包进去!
现在有两种办法:
首先需要一个启动类,类在启动的时候把相关的依赖都初始化进去
方法一:使用插件maven-shade-plugin
-
<plugin> -
<groupId>org.apache.maven.plugins</groupId> -
<artifactId>maven-shade-plugin</artifactId> -
<version>2.3</version> -
<executions> -
<execution> -
<phase>package</phase> -
<goals> -
<goal>shade</goal> -
</goals> -
<configuration> -
<transformers> -
<transformer -
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> -
<mainClass>util.Microseer</mainClass> -
</transformer> -
</transformers> -
</configuration> -
</execution> -
</executions> -
</plugin>
这样打出来的包ToolHelper-0.0.1-SNAPSHOT.jar和original-ToolHelper-0.0.1-SNAPSHOT.jar
original-是原始包就是不含第三方jar的,另一个是含第三方jar的
方法二:使用插件maven-assembly-plugin
-
<!-- Maven Assembly Plugin --> -
<plugin> -
<groupId>org.apache.maven.plugins</groupId> -
<artifactId>maven-assembly-plugin</artifactId> -
<version>2.4.1</version> -
<configuration> -
<!-- get all project dependencies --> -
<descriptorRefs> -
<descriptorRef>jar-with-dependencies</descriptorRef> -
</descriptorRefs> -
<!-- MainClass in mainfest make a executable jar --> -
<archive> -
<manifest> -
<mainClass>util.Microseer</mainClass> -
</manifest> -
</archive> -
</configuration> -
<executions> -
<execution> -
<id>make-assembly</id> -
<!-- bind to the packaging phase --> -
<phase>package</phase> -
<goals> -
<goal>single</goal> -
</goals> -
</execution> -
</executions> -
</plugin>
这样打出来的包:ToolHelper-0.0.1-SNAPSHOT-jar-with-dependencies.jar和ToolHelper-0.0.1-SNAPSHOT.jar
jar-with-dependencies是包含第三方的jar,另一个是不含的!
最终效果: