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

Mik*_*ike 25 maven

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

fuz*_*BSc 31

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

实现这一目标的答案是:

<includeScope>compile</includeScope>
Run Code Online (Sandbox Code Playgroud)

该指令进入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>
Run Code Online (Sandbox Code Playgroud)

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

  • 使用`<includeScope> runtime </ includeScope>`可能会更好,因为它会复制编译和运行时依赖项.例如,如果你使用SLF4J日志记录,那么`slf4j-api`将是编译时依赖,而桥(`jcl-over-slf4j`,`jul-to-slf4j`)和后端(例如`slf4j) -log4j12`)将是运行时依赖项. (6认同)

Rag*_*ram 21

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

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

  • 感谢您的建议,我使用<includeScope>编译</ includeScope>,它的工作原理.谢谢. (9认同)
  • @Raghuram迈克在这里确实提出了一个观点,一个不能排除范围测试.请参阅http://stackoverflow.com/questions/5850788/filter-dependencies-copied-by-mavens-copy-dependency (4认同)

Mak*_*min 6

文档说:被解释的范围是 Maven 看到的范围,而不是 pom.xml 中指定的范围。

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

问候