7

I need to copy just one dependency and all its transitive dependencies to a specified folder. I know i can exclude artifacts with "excludeArtifactIds", but I also need to exclude the transitive dependencies of those artifacts, which, apparently "excludeArtifactIds" does not do.

Is there a way of doing this?

calin014
  • 429
  • 1
  • 6
  • 17
  • did you find a solution to this? I am facing the same problem and am unable to find a solution. – vanval Feb 08 '17 at 14:02

2 Answers2

7

It appears that the Maven dependency plugin is not designed for this as they closed one request for this functionality as "WONTFIX" and another request has been OPEN since 2007.

However, you can use the maven-assembly-plugin to accomplish a similar task.

Below I've attached two sample POM's. The first is the dependent project (the one you wanted to copy) which itself has one dependency (for example). The second is the aggregate project where you are copying the other project and it's dependency to. I've also attached the assembly desriptor file that you'll use to copy the dependency.

Essentially, this will copy the first project and it's one dependency to the target/dest (configurable) directory of the second project.

First POM (dependent project): /sample-dependency/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>sample-dependency</groupId>
  <artifactId>sample-dependency</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.5</version>
    </dependency>
  </dependencies>
</project>

Second POM (aggregating project): /sample-dependency-aggregator/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>sample-dependency-aggregator</groupId>
    <artifactId>sample-dependency-aggregator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sample-dependency-aggregator</name>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <id>aggregate</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptor>src/main/assembly/default.xml</descriptor>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <attach>false</attach>
                    <finalName>dest</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>sample-dependency</groupId>
            <artifactId>sample-dependency</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

Assembly descriptor : /sample-dependency-aggregator/src/main/assembly/default.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd ">
    <id>default</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>sample-dependency:sample-dependency</include>
            </includes>
            <useTransitiveDependencies>true</useTransitiveDependencies>
            <useTransitiveFiltering>true</useTransitiveFiltering>
        </dependencySet>
    </dependencySets>


</assembly>
lmsurprenant
  • 1,723
  • 2
  • 14
  • 28
jeckhart
  • 571
  • 3
  • 10
  • 1
    Interesting answer, but the author wants to *exclude* a specific dependency with its transitive dependencies, not include one. Is this possible with the assembly plugin? – firtydank Oct 21 '16 at 11:36
1

How about setting excludeTransitive to true?

Raghuram
  • 51,854
  • 11
  • 110
  • 122