maven-dependency-plugin是处理与依赖相关的插件。它有不少可用的goal,大部分是和依赖构建、分析和解决相关的goal,这部分goal能够直接用maven的命令操做,例如:mvn dependency:tree、mvn dependency:analyze;这类操做在平时的maven应用中不多会用到。这里主要介绍除此以外的、用得最多的几个操做:copy, copy-dependencies和它们对应的unpack, unpack-dependencieshtml
首先声明插件:web
Xml代码 spring
<build> apache
<plugins> less
<plugin> maven
<groupId>org.apache.maven.plugins</groupId> ide
<artifactId>maven-dependency-plugin</artifactId> ui
<version>2.8</version> spa
</plugin> 插件
</plugins>
</build>
copy操做能够用来将某个(些)maven artifact(s)拷贝到某个目录下。添加phase和goal以下:
Xml代码
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
而后就是配置,copy能够的配置的项比较多,详细的请参考:copy配置。下面是一些经常使用项说明:
Name Type Since Description
artifactItems | List | 1.0 | Collection of ArtifactItems to work on. (ArtifactItem contains groupId, artifactId, version, type, classifier, outputDirectory, destFileName and overWrite.) See Usage for details. |
outputDirectory | File | 1.0 | Default output location used for mojo, unless overridden in ArtifactItem. Default value is: ${project.build.directory}/dependency. User property is: outputDirectory. |
prependGroupId | boolean | 2.7 | Prepend artifact groupId during copy Default value is: false. User property is: mdep.prependGroupId. |
这里除了artifactItems没有默认值,须要指定外,全部其余的选项均可以被忽略:
Xml代码
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</artifactItem>
</artifactItems>
</configuration>
以上配置会将junit包拷到target/dependency目录下,文件名为:junit-4.11.jar。
若是想把它拷到lib目录下,能够以下配置:
Xml代码
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</artifactItem>
</artifactItems>
<outputDirectory>lib</outputDirectory>
</configuration>
或者:
Xml代码
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<outputDirectory>lib</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
根据上面的说明,artifactItem里能够有如下几个参数:
一样的参数,artifactItem里的优先级更高,例如:
Xml代码
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</artifactItem>
<artifactItem>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
<outputDirectory>lib2</outputDirectory>
</artifactItem>
</artifactItems>
<outputDirectory>lib</outputDirectory>
</configuration>
其中junit会拷到lib目录下,由于它没有定义本身的outputDirectory;slf4j-log4j12会拷到lib2下,由于它定义了本身的outputDirectory。
unpack和copy相似,只不过它会把拷来的包解开,例如:
Xml代码
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</artifactItem>
<artifactItem>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
<outputDirectory>lib2</outputDirectory>
</artifactItem>
</artifactItems>
<outputDirectory>lib</outputDirectory>
</configuration>
则junit和slf4j-log4j12拷完之后,放到lib和lib2下的再也不是Jar包,仍是Jar包里的内容。
上面介绍的copy 和 unpack操做是由要拷某个包,这个包须要具体指定要拷哪一个包,与当前工程的依赖没有关系。copy-dependencies和它有点相似,可是它是用来拷当前工程的依赖包的,典型的,例如咱们有一个web应用,当打成war包的时候,它全部的依赖也须要被打到应用中。
copy-dependencies的参数有不少,详细的能够参考:copy-dependencies Doc,可是几乎全部都有默认值。因此一个最简单的定义以下:
Xml代码
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
这里没有指定任何配置,全部的参数都用默认值,则当前工程的全部依赖(直接、间接的)都会被拷到target/dependency目录下。
也可使用outputDirectory指定存放在。另外,如下几个参数能够控制哪些依赖将被拷出(或排除):
Name Type Since Description
excludeArtifactIds | String | 2.0 | Comma separated list of Artifact names to exclude. User property is: excludeArtifactIds. |
excludeClassifiers | String | 2.0 | Comma Separated list of Classifiers to exclude. Empty String indicates don't exclude anything (default). User property is: excludeClassifiers. |
excludeGroupIds | String | 2.0 | Comma separated list of GroupId Names to exclude. User property is: excludeGroupIds. |
excludeScope | String | 2.0 | Scope to exclude. An Empty string indicates no scopes (default). User property is: excludeScope. |
excludeTransitive | boolean | 2.0 | If we should exclude transitive dependencies Default value is: false. User property is: excludeTransitive. |
excludeTypes | String | 2.0 | Comma Separated list of Types to exclude. Empty String indicates don't exclude anything (default). User property is: excludeTypes. |
includeArtifactIds | String | 2.0 | Comma separated list of Artifact names to include. User property is: includeArtifactIds. |
includeClassifiers | String | 2.0 | Comma Separated list of Classifiers to include. Empty String indicates include everything (default). User property is: includeClassifiers. |
includeGroupIds | String | 2.0 | Comma separated list of GroupIds to include. User property is: includeGroupIds. |
includeScope | String | 2.0 | Scope to include. An Empty string indicates all scopes (default). The scopes being interpreted are the scopes as Maven sees them, not as specified in the pom. In summary:
User property is: includeScope. |
includeTypes | String | 2.0 | Comma Separated list of Types to include. Empty String indicates include everything (default). User property is: includeTypes. |
例如当前工程有如下依赖:
Xml代码
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-script</artifactId>
<version>2.13.2</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>2.13.2</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-xstream</artifactId>
<version>2.13.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.10.0</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.ogce</groupId>
<artifactId>xpp3</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
要排除全部scope为test的依赖:
Xml代码
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
<configuration>
<includeScope>compile</includeScope>
</configuration>
</plugin>
注意:这里不能<excludeScope>test</excludeScope>,这样会把全部compile级别的也排除。看下图:
Copied From: Dependencies Scopes
scope/phase-> | compile | test | run | assembly |
compile | U | U | U | U |
provided | U | ! | ! | ! |
runtime | ! | U | U | U |
test | ! | U | ! | ! |
说明:最左侧是表示dependency的scope级别,顶行表示maven的阶段,能够看出:compile级别的dependency会在全部阶段都被使用。
要排除全部camel的依赖,以下:
Xml代码
<configuration>
<excludeGroupIds>org.apache.camel</excludeGroupIds>
</configuration>
要排除除camel-spring外的全部其余依赖以下:
Xml代码
<configuration>
<includeArtifactIds>camel-spring</includeArtifactIds>
</configuration>