如何使用maven将依赖项jar(没有测试jar)复制到目录?

时间:2011-11-29 12:16:57

标签: maven

我看到maven-dependency-plugin这样做了;但是,它似乎将所有内容(包括测试jar)复制到目标目录。任何人都知道如何配置此插件以排除测试罐?

3 个答案:

答案 0 :(得分:26)

迈克在上面的评论中回答了他们自己的问题。我认为Mike的用例与我的相似,我想复制我依赖的所有jar以及我自己的jar,以便创建足以执行程序的目录层次结构,而不将这些依赖项直接包含在我的自己的罐子。

实现这一目标的答案是:

<includeScope>compile</includeScope>

该指令进入maven-dependency插件的pom.xml部分。例如:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <includeScope>compile</includeScope>
            </configuration>
        </execution>
    </executions>
</plugin>

excludeScope不起作用,因为排除测试会中止构建并排除所有可能的范围。相反,需要调整所包含的范围。

答案 1 :(得分:19)

目前尚不清楚是否要排除test 范围的jar或测试相关的jar(test 分类器)。在任何一种情况下,dependency:copy-dependencies都有两个属性可以帮助您。

  • excludeClassifiers逗号分隔要排除的分类器列表。空字符串表示不排除任何内容(默认)。
  • excludeScope排除范围。空字符串表示没有范围(默认)。

答案 2 :(得分:2)

文档说:被解释的范围是 Maven看到了它们,而不是pom中指定的那样。

In summary:
  * runtime scope gives runtime and compile dependencies
  * compile scope gives compile, provided, and system dependencies
  * test (default) scope gives all dependencies
  * provided scope just gives provided dependencies
  * system scope just gives system dependencies

根据我的经验,如果您只想使用在项目pom.xml文件中指定的具有编译范围的依赖项来运行类,则必须添加-DincludeScope=runtime Java系统设置,如下所示:

mvn compile dependency:copy-dependencies -DincludeScope=runtime
java -cp "target/dependecy/*:target/classes" com.example.Main args...

致谢