Maven复制依赖关系复制的过滤器依赖关系?

我需要基本上完成以下几点:

将我的图书馆建成一个JAR。 (容易,已经完成了)
>将我的库的依赖项复制到本地文件夹,包括主项目JAR,不包括标记为提供的依赖项。

我看不到第二部分完成了。有没有更好的方法来做到这一点,而不是我在下面做什么?我本质上是将这些JAR部署到服务器上的lib目录中。不幸的是,下面的代码包括所有JAR,甚至提供的JAR,但不包括项目输出JAR。我应该为此使用不同的插件吗?

<?xml version="1.0"?>
<project>
    ...

    <dependencies>
        <dependency>
            <groupId>com.provided</groupId>
            <artifactId>provided-lib</artifactId>
            <version>1.2.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>

        ...

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>/hello</outputDirectory>
                            <excludeTransitive>true</excludeTransitive>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
最佳答案
为了防止pluging收集提供的依赖关系,您可以使用@Raghuram解决方案(1)。我也尝试跳过测试范围的依赖关系,发现issue不能做这么简单 – 测试意味着插件语义中的“一切”。

所以排除提供和测试范围的解决方案是includeScope运行时。

<includeScope>runtime</includeScope>

收集依赖关系后,您可以将具有maven-antrun-plugin的项目jar复制到目标目录,例如:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.2</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${java.io.tmpdir}/test</outputDirectory>
                        <includeScope>runtime</includeScope>                        
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <configuration>
                        <tasks>
                        <copy
                            file="${build.directory}/${project.artifactId}-${project.version}.jar"
                            todir="${java.io.tmpdir}/test" />
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我不知道任何其他解决方案 – 除了创建一个新的pom-dist.xml(也许<包装> pom< / package>),它只是拥有对你的库的依赖,并收集所有传递依赖关系独占测试/提供的范围。如果您不想提供一个全新的项目,您可以使用mvn -f pom-dist.xml包执行此操作。

转载注明原文:Maven复制依赖关系复制的过滤器依赖关系? - 代码日志