Maven-将特定的依赖及其传递依赖复制到给定位置 [英] Maven - Copy specific dependency with its transitive dependencies to a give location
问题描述
我有一个Maven项目,我说过Spring框架库是依赖项,我想将带有传递性依赖项的Spring框架依赖项复制到指定的位置.
I have a maven project which I have say spring framework libraries as dependencies, I want to copy spring framework dependencies with there transitive dependencies to a location specified.
我在apache上查看过maven依赖插件指南,我有几种选择可以解决全部问题.
I have gone through maven dependency plugin guides at apache, I have several options where non of them will solve the complete problem.
- 复制依赖项选项
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
这会将所有依赖项和其中的可传递对象复制到给定的位置,我只需要spring依赖项和那里的可传递对象.
This will copy all the dependencies and there transitives to a given location, I want only spring dependencies and there transitives.
- 复制特定工件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.4.RELEASE</version>
<type>jar</type>
<overWrite>false</overWrite> <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<destFileName>optional-new-name.jar</destFileName>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/wars</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
</executions>
</plugin>
这不能解决传递依赖.
This is not coping the transitive dependencies.
解决我两个问题的任何解决方案.
Any solution which solve my both problems.
推荐答案
对于程序集插件,这是可能的.
This is possible with the assembly plugin.
插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptors>
<descriptor>src/assembly/assembly.xml</descriptor>
</descriptors>
<finalName>plugins</finalName> <!--folder name in target directory-->
</configuration>
<executions>
<execution>
<id>some-id</id> <!-- must match assembly id in assembly.xml-->
<phase>pre-integration-test</phase> <!-- pic -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
assembly.xml
assembly.xml
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>some-id</id>
<formats>
<format>dir</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<includes>
<include>
org.springframework:spring-web
</include>
</includes>
<useTransitiveDependencies>true</useTransitiveDependencies>
<useTransitiveFiltering>true</useTransitiveFiltering>
</dependencySet>
</dependencySets>
</assembly>
重要的位是<useTransitiveDependencies>true</useTransitiveDependencies>
和<useTransitiveFiltering>true</useTransitiveFiltering>
,这导致include
应用于项目依赖项,但不适用于传递性依赖项,从而导致 spring-web工件及其依赖项要复制到目录中.
The important bits are <useTransitiveDependencies>true</useTransitiveDependencies>
and <useTransitiveFiltering>true</useTransitiveFiltering>
, which cause the include
to be applied to project dependencies, but not to transitive dependencies, resulting in spring-web artifact and it's dependencies to be copied to the directory.
这篇关于Maven-将特定的依赖及其传递依赖复制到给定位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!