背景:

  1.需要某个特殊的 jar包,但是有不能直接通过maven依赖获取,或者说在其他环境的maven仓库内不存在,那么如何将我们所需要的jar包打入我们的生产jar包中。

  2.某个jar包内部包含的文件是我们所需要的,或者是我们希望将它提取出来放入指定的位置 ,那么除了复制粘贴,如何通过maven插件实现呢

maven-dependency-plugin插件

  dependency  插件我们最常用到的是 dependency:copy  dependency:copy-dependencies  及dependency:unpack    dependency:unpack-dependencies 这四个,如果要实现上述的两种场景,我们需要的 是 第一个和第三个。

dependency:copytakes a list of artifacts defined in the plugin configuration section and copies them to a specified location, renaming them or stripping the version if desired. This goal can resolve the artifacts from remote repositories if they don't exist in either the local repository or the reactor.(将一系列在此插件内列出的artifacts ,将他们copy到一个特殊的地方,重命名或者去除其版本信息。这个可以解决远程仓库存在但是本地仓库不存在的依赖问题)。

  其依赖配置如下:

            <!--dependency plugin test start-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<outputDirectory>${project.build.directory}/lib/lib1</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
<outputDirectory>${project.build.directory}/lib/lib1</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>

我们将两个指定的jar包junit slf4j-log4j12 分别输出到${project.build.directory}/lib/lib1 目录下  即${project.basedir}/target/lib 目录下。

但是这样达到我们的 目的没有呢,这是没有的 我们希望将这些指定的  输出的文件打包到我们的war包中以方便在任何环境内都能正常运行。

大家是否还记得上篇博客:http://www.cnblogs.com/lianshan/p/7348093.html、

利用maven-assembly-plugin加载不同环境所需的配置文件的assembly.xml 文件定义的,fileSet定义的,我们可以将指定目录下的 文件输出到我们的war包结构中,好比这样

        <fileSet>
<directory>${project.build.directory}/lib/lib1</directory>
<outputDirectory>lib</outputDirectory>
<directoryMode></directoryMode>
<fileMode></fileMode>
</fileSet>

这样我们就将copy  出来的 文件放到了war包中,完美的解决了我们的需求,很实用于一些现实场景。

  

 那么问题来了,如果我们想将某个jar包的一部分提取出来我们应该怎么做呢,我们是不是因该打开jar包呢 。

dependency:unpack : like copy but unpacks. 这是官网的 解释,懂了吧 。

打个比方,dubbo这个jar包封装了启动命令脚本,现在我们要上生产了,我们希望生产环境利用这个启动命令进行项目的启动,那么在jar包就肯定不行了,那么我们怎么将这些提取出来呢,当然只能打开了啊

搜我们通过这样的配置:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<outputDirectory>${project.build.directory}/dubbo</outputDirectory>
<includes>META-INF/assembly/**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>

我们将assembly 下的 文件输出到target/dubbo目录下。

是不是这样就达到我们的效果了,成功将这个文件从jar包中抽取出来了,至于怎么放入我们的包中,那也就是和上面一样了 ,我们利用assembly配置将我们希望的目录下的 文件封装到war包中了。到这里,我们是不是就知道这个maven插件可以做些什么了。

  其实具体的配置在官网上都能找到答案,maven插件的使用,官网都提供了详细的教程,及具体的示例,具体的详细配置可参考apache官网:http://maven.apache.org/components/plugins/maven-dependency-plugin/plugin-info.html

本文的目的,是清楚的告诉你一个插件 能做什么样的事,我们要做什么样的事,需要什么样的插件,大家各司其职,协同工作。

我们才能在我们要做这件事的时候找到它,使用它,而不至于完全没有方向。

互联网发展到今天,大多问题都有了良好的解决方案,前人的智慧是无穷的,同时,不是所有人都适合创造,那么至少可以将他人创造的,用精、用好,何尝不是一种发扬。

利用maven-dependency-plugin插件使用及场景的更多相关文章

  1. maven release plugin插件

    1.打包版本区别 SNAPSHOT 快照版本(开发阶段,不稳定,容易出现bug)RELEASE 正式版本(外部依赖使用阶段,稳定,很少出现bug)Tag :标记每次代码提交的版本(比较稳定,类似分支) ...

  2. 利用maven中resources插件的copy-resources目标进行资源copy和过滤

    maven用可以利用如下配置进行资源过滤,pom.xml的配置如下: <build> <!-- 主资源目录 --> <resources> <resource ...

  3. Maven版本管理-Maven Release Plugin插件

    一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...

  4. [转]利用maven的surefire插件实现单元测试与集成测试

    原文链接 http://my.oschina.net/dlpinghailinfeng/blog/301136 maven单元测试与集成测试 通过maven的Profile 配置生命周期 通过mave ...

  5. 记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用

    今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在po ...

  6. 利用 Maven 创建 Docker 镜像并且推送到私有注册中心

    利用 Maven 命令生成项目框架 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -Darchetype ...

  7. 学习Maven之Maven Enforcer Plugin

    1.Maven Enforcer plugin是什么鬼? 在说这个插件是什么前我们先思考这么一个问题:当我们开发人员进入项目组进行开发前,要准备开发环境,而领导总是会强调工具的统一,编译环境的统一.比 ...

  8. 利用Maven打包时,如何包含更多的资源文件

    首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...

  9. 利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)

    前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实战>.其实园内这方面文章已有不少,那么为什么我还要重复造轮子呢?我只是想记录自己的实践 ...

随机推荐

  1. hdu 1140:War on Weather(计算几何,水题)

    War on Weather Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. 设置Android程序图标和程序标题

    修改程序名称 在/res/values/strings.xml中修改程序名称,例如: <string name="app_name">你的程序名称</string ...

  3. ip地址查询系统和CMD查询的结果不一样

    由于cmd输入 ipconfig查看的IP是局域网内网IP,而用ip地址查看器查看是公网上网的ip地址.所以不一样. 查询内网ip: windows系统: 开始--运行--cmd,命令行输入: ipc ...

  4. Android无线测试之—UiAutomator UiScrollable API介绍五

    滑动区域校准常量设置与获取 一.校准概念 校准常量指的是:滑动操作坐标时的偏移量,用来取偏移比例 二.相关API 返回值 API 描述 double getSwipeDeadZonePercentag ...

  5. 第一个内核模块hello world

    1.源码树的下载和编译(只是研究内核模块的话,应该不需要源码树的) 下载很简单,压缩包解压 编译:make menuconfig make bzImage -j4 参考 2. cd  /usr/src ...

  6. Json与数组

    今天趁着看源代码的同时,记录学习的小知识. 一.String.Split 方法有6个重载函数: 1) public string[] Split(params char[] separator)2) ...

  7. webpack配置(二)

    在配置webpack json loader的时候报错,如下: 解决方案: 首先,json文件中不能有注释 其次: 这里webpack.consig.js里面,modul下的loaders的loade ...

  8. 【黑金原创教程】【Modelsim】【第五章】仿真就是人生

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  9. Linux上查看和修改字符集

    author :headsen chen date: 2018-05-14  16:20:30 一·查看字符集 字符集在系统中体现形式是一个环境变量,看当前终端使用字符集的有以下几种方式: 1: 1 ...

  10. Oracle Schema Objects(Schema Object Storage And Type)

    One characteristic of an RDBMS is the independence of physical data storage from logical data struct ...