利用maven-dependency-plugin插件使用及场景
背景:
1.需要某个特殊的 jar包,但是有不能直接通过maven依赖获取,或者说在其他环境的maven仓库内不存在,那么如何将我们所需要的jar包打入我们的生产jar包中。
2.某个jar包内部包含的文件是我们所需要的,或者是我们希望将它提取出来放入指定的位置 ,那么除了复制粘贴,如何通过maven插件实现呢
maven-dependency-plugin插件
dependency 插件我们最常用到的是 dependency:copy dependency:copy-dependencies 及dependency:unpack dependency:unpack-dependencies 这四个,如果要实现上述的两种场景,我们需要的 是 第一个和第三个。
dependency:copy:takes 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插件使用及场景的更多相关文章
- maven release plugin插件
1.打包版本区别 SNAPSHOT 快照版本(开发阶段,不稳定,容易出现bug)RELEASE 正式版本(外部依赖使用阶段,稳定,很少出现bug)Tag :标记每次代码提交的版本(比较稳定,类似分支) ...
- 利用maven中resources插件的copy-resources目标进行资源copy和过滤
maven用可以利用如下配置进行资源过滤,pom.xml的配置如下: <build> <!-- 主资源目录 --> <resources> <resource ...
- Maven版本管理-Maven Release Plugin插件
一.什么是版本管理 首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基 ...
- [转]利用maven的surefire插件实现单元测试与集成测试
原文链接 http://my.oschina.net/dlpinghailinfeng/blog/301136 maven单元测试与集成测试 通过maven的Profile 配置生命周期 通过mave ...
- 记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用
今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在po ...
- 利用 Maven 创建 Docker 镜像并且推送到私有注册中心
利用 Maven 命令生成项目框架 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -Darchetype ...
- 学习Maven之Maven Enforcer Plugin
1.Maven Enforcer plugin是什么鬼? 在说这个插件是什么前我们先思考这么一个问题:当我们开发人员进入项目组进行开发前,要准备开发环境,而领导总是会强调工具的统一,编译环境的统一.比 ...
- 利用Maven打包时,如何包含更多的资源文件
首先,来看下MAVENx项目标准的目录结构: 一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,ma ...
- 利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)
前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实战>.其实园内这方面文章已有不少,那么为什么我还要重复造轮子呢?我只是想记录自己的实践 ...
随机推荐
- 学习:java代码检测
转自:http://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E5%BC%82%E5%91%B3 对于Java开发语言,有些工具,比如Checkstyle.PM ...
- 让所有IE支持HTML5的解决方案
自从HTML5能为我们的新网页带来更高效洁净的代码而得到更多的关注,然而唯一能让IE识别那些新元素(如<article>)的途径是使用HTML5 shiv,感谢remy sharp为我们提 ...
- AWS系列-使用Could Events定时对EC2打快照
第1章 使用Could Events定时对EC2打快照 1.1 打开控制台搜索CloudWatch 在搜索栏输入CloudWatch,点击进入CloudWatch控制台 1.2 选择进入Events ...
- C#三种字符串拼接方法的效率对比
C#字符串拼接的方法常用的有:StringBuilder.+.string.Format.List<string>.使用情况不同,效率不同. 1.+的方式 string sql = &qu ...
- JQZoom
UI采用jQuery插件 习惯网购的朋友都深有体会.大部分皇冠级淘宝卖家都是图片控.京东商城的放大图效果也是吸引消费者的法宝之一.京东商城产品展示页支持多图切换并放大代码,放大功能的核心代码为jQzo ...
- 【BZOJ4726】[POI2017]Sabota? 树形DP
[BZOJ4726][POI2017]Sabota? Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者 ...
- LeetCode-Water and Jug Problem
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...
- 元素隐藏 css
参考:http://www.zhangxinxu.com/wordpress/2011/03/css-%E7%9B%B8%E5%AF%B9%E7%BB%9D%E5%AF%B9relativeabsol ...
- Spring Security OAuth2 授权码模式
背景: 由于业务实现中涉及到接入第三方系统(app接入有赞商城等),所以涉及到第三方系统需要获取用户信息(用户手机号.姓名等),为了保证用户信息的安全和接入方式的统一, 采用Oauth2四种模式之一 ...
- angular中的子路由用法
Angular ui-route的用法 引入angular和使用angular子路由时需要的依赖模块angular-ui-route.js.并且在html中将路由要插入的位置写上.而在js部分中和an ...