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/

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

  • 相关阅读:
    在X++中使用IoC/DI模式应对不断变化的客户需求
    Predicate<T>与Func<T, bool>泛型委托
    Windows Live Writer插件:在WLW中插入语法高亮代码
    学习C#和.NET的资源
    C#中事件的动态调用
    2008年全国软件工程大会论文集
    C#基础:接口(二)
    【转载】"变化"、"复用"、"抽象"、"稳定" 影响着软件设计模式,架构,开发方法
    【领域驱动设计】.NET实践:实体、值对象和数据传输对象
    RSS订阅之基本使用
  • 原文地址:https://www.cnblogs.com/xingzifei/p/6063231.html
Copyright © 2011-2022 走看看