maven打包的时候将依赖的jar包也打进去

今天使用java -cp出现NoClassDefFoundError,研究半天打开jar后发现原来没有将依赖包打入

原文:https://blog.****.net/xb12369/article/details/79966633

最近在改造底层一个utils项目的时候,再将lib工程转maven项目后,打包丢了相关依赖;

 

之前lib工程的时候是需要借助第三方fatjar的,现在转maven后相关依赖全部丢失;

 

基于当前工程已经被很多项目引用,这里谋求一个新的出路,希望用maven插件也能将相关依赖打包进去!

 

现在有两种办法:

首先需要一个启动类,类在启动的时候把相关的依赖都初始化进去

maven打包的时候将依赖的jar包也打进去

 

 

方法一:使用插件maven-shade-plugin

 
  1. <plugin>

  2. <groupId>org.apache.maven.plugins</groupId>

  3. <artifactId>maven-shade-plugin</artifactId>

  4. <version>2.3</version>

  5. <executions>

  6. <execution>

  7. <phase>package</phase>

  8. <goals>

  9. <goal>shade</goal>

  10. </goals>

  11. <configuration>

  12. <transformers>

  13. <transformer

  14. implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

  15. <mainClass>util.Microseer</mainClass>

  16. </transformer>

  17. </transformers>

  18. </configuration>

  19. </execution>

  20. </executions>

  21. </plugin>

这样打出来的包ToolHelper-0.0.1-SNAPSHOT.jar和original-ToolHelper-0.0.1-SNAPSHOT.jar

original-是原始包就是不含第三方jar的,另一个是含第三方jar的

 

 

方法二:使用插件maven-assembly-plugin

 
  1. <!-- Maven Assembly Plugin -->

  2. <plugin>

  3. <groupId>org.apache.maven.plugins</groupId>

  4. <artifactId>maven-assembly-plugin</artifactId>

  5. <version>2.4.1</version>

  6. <configuration>

  7. <!-- get all project dependencies -->

  8. <descriptorRefs>

  9. <descriptorRef>jar-with-dependencies</descriptorRef>

  10. </descriptorRefs>

  11. <!-- MainClass in mainfest make a executable jar -->

  12. <archive>

  13. <manifest>

  14. <mainClass>util.Microseer</mainClass>

  15. </manifest>

  16. </archive>

  17.  
  18. </configuration>

  19. <executions>

  20. <execution>

  21. <id>make-assembly</id>

  22. <!-- bind to the packaging phase -->

  23. <phase>package</phase>

  24. <goals>

  25. <goal>single</goal>

  26. </goals>

  27. </execution>

  28. </executions>

  29. </plugin>

这样打出来的包:ToolHelper-0.0.1-SNAPSHOT-jar-with-dependencies.jar和ToolHelper-0.0.1-SNAPSHOT.jar

jar-with-dependencies是包含第三方的jar,另一个是不含的!

 

最终效果:

maven打包的时候将依赖的jar包也打进去