Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

maven-dependency-plugin, copy-dependencies: exclude some artifact ids and their dependencies

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?

like image 914
calin014 Avatar asked Jan 31 '11 17:01

calin014


2 Answers

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>
like image 170
jeckhart Avatar answered Jan 02 '23 10:01

jeckhart


How about setting excludeTransitive to true?

like image 39
Raghuram Avatar answered Jan 02 '23 09:01

Raghuram