对于maven项目,如果直接使用eclipse的export功能,导出的jar包是不包含依赖的第三方jar包的。
而eclipse maven的不使用插件,也是不包含依赖的第三方jar包的
所以解决方案是使用eclipse的maven导出jar包:pom.xml中使用maven-assembly-plugin插件
该插件有加main类和不加main类两种 我想用不加main类的这种,
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
要加main类的方式:
<plugins>
<!--(start) for package jar with dependencies -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!--(end) for package jar with dependencies -->
</plugins>
还有修改为使用assembly.xml方式的,参考https://blog.csdn.net/w_quan/article/details/83306213
第二步,点击eclipse maven的update project
第三步,项目右键->run as->maven build...->Goals中填package->run,或者直接maven build,然后就会在项目的target目录下生成jar包,截图参考这两篇文章(https://blog.csdn.net/rongrong_love_lc/article/details/62890994和https://www.cnblogs.com/justinzhang/p/4983633.html)如下:注意,现在有些eclipse maven插件没有select框了,那就自己在"Goals"框中填入"package"。
结果展示:com.youzan是项目,而com和org下有依赖的第三方jar包
关于普通Java Project导出jar包含第三方jar的方法:
在网上看的方案,基本都是:
1、自定义MANIFEST.MF
2、FatJar
尝试了方案1,并没有成功。而方案2,则只支持低版本的Eclipse,因此也放弃了此方案。
最终测试可用的方案是:项目中新建有执行入口的类,然后导出时,选择Runnable Jar File,生成的Jar包可正常使用第三方Jar的功能。
具体步骤:
工程右键-->Export-->Java-->Runnable Jar File-->Launch configuration选择项目中包含执行入口的类,Export destination选择Jar包保存路径-->finish
经过测试,通过Runnable Jar File的方式的确能带上第三方jar的class