zoukankan      html  css  js  c++  java
  • 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/

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

  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/xingzifei/p/6063231.html
Copyright © 2011-2022 走看看