筛选由maven的copy:copy-dependencies插件复制的测试依赖项

时间:2018-03-14 11:03:23

标签: java maven maven-dependency-plugin

我的情况几乎与this issue中公开的情况相同,只是使用-DincludeScope=runtime的建议解决方案对我不起作用:

  1. 我制作jar
  2. 我想将依赖项复制到用于运行应用程序的文件夹中。在此文件夹中,我不需要与测试相关的类/库。
  3. (但这里超出范围)我为部署目的构建了一个存档文件(.war)。该存档不包含测试库。
  4. 我的pom看起来像:

    <dependencies>
      <dependency>
        <groupId>my.company.group</groupId>
        <artifactId>common</artifactId>
        <version>4.0.0-SNAPSHOT</version>
        <scope>compile</scope>
      </dependency>
      <dependency>
        <groupId>my.company.group</groupId>
        <artifactId>common</artifactId>
        <version>4.0.0-SNAPSHOT</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
    </dependencies>
    

    您可能已经注意到,我们正在使用一个为该项目提供通用类的通用项目(以及其他)。 最近在将通用测试类放入此项目时出现问题,因此需要第二个jar存档用于测试目的。在我看来,它应该像魅力一样:两个jar文件都有不同的名称和范围。

    通过mvn clean compile创建.war存档很好:创建的war存档不包含测试库。

    但是使用mvn clean compile dependency:copy-dependencies -DoutputDirectory=./libPath -DincludeScope=runtime jar:jar复制依赖项似乎没有考虑范围。正如其他一些帖子所指出的那样,param -DexcludeScope=test是无用的,因为它排除了每个范围。

    我还尝试在依赖声明中使用classifier属性,并在运行maven时使用-DexcludeClassifiers=test而没有显着效果。

    在我的mave电话会议或我的pom配置中,是否有我遗漏的东西?

    (Fyi:maven版本是3.0.5,在java 7上运行)

1 个答案:

答案 0 :(得分:0)

最后,经过一些搜索后,解决方案正确理解了maven生命周期。

长话短说:我修改了maven调用,而不是pom配置(在final String[] months = new String[] { "Jan", "Feb", "Mar", "Apr" }; IAxisValueFormatter formatter = new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return months [(int) value]; } @Override public int getDecimalDigits() { return 0; } }; XAxis xAxis = mLineChart.getXAxis(); xAxis.setGranularity(1f); xAxis.setValueFormatter(formatter); 之前使用test-compile阶段):

compile

阅读maven documentation,默认构建阶段流程如下:

  1. 清洁
  2. 过程来源
  3. 编译
  4. 处理 - 测试 - 源
  5. 测试编译
  6. 目标依赖项默认绑定到mvn clean test-compile dependency:copy-dependencies -DoutputDirectory=./libPath -includeScope=runtime compile jar:jar 阶段,在我的第一次尝试中,我将其绑定到process-sources阶段。我认为我的问题来自这样一个事实:当这个目标被执行时,测试类还没有被编译,因此没有被标记为&#39;就这样。

    compile之前运行test-compile阶段(并在前者上绑定复制目标)允许识别测试类,因此compile参数的值为有效地使用了。

    话虽如此,这几乎是纯粹的经验性理解。如果有人有更多的理论解释或文档,我很乐意听到它。