maven 打包第三方依赖包


首先,简单介绍Maven。Maven是管理Java项目开发的工具,不是IDE,不是编译工具。它只是提供了一套规则和插件,说明如何对Java项目进行开发和管理。

它的规则通过POM文件说明。对于POM文件,这里不详细介绍,只做大致介绍。我认为,POM文件大致有两个作用,静态描述和动态描述。第一个作用,静态描述,即对POM文件所在的文件夹的(子)项目的介绍,比如该(子)项目的唯一标识(坐标),该子项目的依赖,该子项目的打包方式等;第二个作用,动态描述,即如何对该(子)项目进行编译、测试、打包等,用生命周期表示。Maven提供三个生命周期以及各个生命周期阶段所需的插件,可以不改直接用,也可以根据自己的需要修改。编译、测试、打包等不是Maven实现,而是它的仓库中提供的插件。仓库是用来存放插件和依赖的地方。仓库有本地、远程仓库。远程仓库又分为:2中央仓库、 私服 和其它公共库。这里不做详细介绍。

这里的任务是如何将第三包依赖包加入到最终的jar可执行文件中。

对于第三方依赖(external dependency) ,有四种方式可以使用。第一种方式,在本地仓库中添加该依赖;第二种方式:将该仓库deploy,放在远程仓库,最好大家都能访问;第三种方式:将该依赖的scope描述为system并说明绝对路径;第四种方式:将该依赖放在程序的自建仓库(static project repository),并在打包的时候将其将入到最终的jar。

本文主要是说明第四种方法,也比较推荐第四种方法。因为前三种方法,要么不利于最终jar文件的分发,要么比较麻烦。第四种方法,在运行的时候不需要修改或者添加java lib path。

很多时候,当某个项目需要的依赖是第三方提供的,我这类遇到的是Jcuda。由于当时在远程仓库还没有Jcuda 7.5 的依赖,就需要将其作为第三方依赖来处理。在编译的时候使用的是第三种方法,但是因为需要再另一台机器上运行,就出现问题了。网上找了很久,有两个说的很好。

http://blog.dub.podval.org/2010/01/maven-in-project-repository.html

http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath-without-installing-them

这两个链接说明了,如何将该依赖包放在程序的lib中,该文件夹如何组织才不会出错,路径如何。

至于如何将该依赖的jar文件打包到最终的文件中。

 

第一步: 将依赖文件放到程序的repository中;

 

第二步:在pom.xml中指明依赖;

<dependency>
                <groupId>jcuda</groupId>
                <artifactId>jcuda</artifactId>
                <version>0.7.5</version>
</dependency>

第三步:打包

首先需要明白,maven打包有两种,生成一个jar包或者生成一个zip包。用maven-jar-plugin来生成jar包。使用maven-jar-plugin和maven-assembly-plugin来生成zip包。

这里,我们第二种方式。即:将应用打成一个jar包,依赖的第三方包放到lib目录下。

首先使用maven-jar-plugin,将自己的代码编译为jar文件;

需要注意到是这段

                         <archive>
                                    <manifest>
                                       ...
                                        <addClasspath>true</addClasspath>
                                        <classpathPrefix>lib/</classpathPrefix>
                        ... </manifest> </archive>

再使用maven-assembly-plugin,将整个项目打包为一个发布包

 

关于 maven-jar-plugin 和 maven-assembly-plugin 怎么写,见 http://blog.csdn.net/cdmamata/article/details/51547033

 

 

也可以见:强烈推荐这个:

http://xxgblog.com/2015/08/07/maven-create-executable-jar/

 

其实,一团迷糊,说明对每个插件还不是很了解。如果对每个插件了解后,就不会有怎么多问题了。因为我只是在一个项目中多增减一个第三方依赖,因为它本来就需要对其他第三方依赖进行打包,所以我只需要完成前两步就可以了。后面两步,关键是对于几个插件的使用说明。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM