15

我使用 shade maven 插件来构建我的项目,以便它的所有依赖项都包含在一个 jar 中(这使得它更容易在 Hadoop 上运行)。Shade 似乎默认排除了我的测试代码,这是可以理解的。因为我想对我的集群运行集成测试,所以我希望设置另一个配置文件来为此目的构建一个单独的 jar。有没有办法配置这个插件也包括测试代码?

4

5 回答 5

8

使用 2.2 版的 maven-shade-plugin,他们添加了一个“shadeTestJar”选项(参见 MSHADE-158):http ://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#shadeTestJar

但是,我尝试使用它并无法使其正常工作。这是我的插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <shadeTestJar>true</shadeTestJar>
            </configuration>
        </execution>
    </executions>
</plugin>

“...-tests.jar”文件没有条目,但主阴影 jar 看起来不错(尽管它不包含任何测试类)。

此外,这个问题重复了另一个问题,尽管接受的答案并不令人满意:How to include test classes in Jar created by maven-shade-plugin?

于 2014-08-15T18:13:27.330 回答
7

最后几个答案充其量是针对损坏功能的混乱解决方法。事实仍然是maven-shade-plugin. 与此同时,我已经调查并从根本上导致了这个错误,并创建了一个补丁. 现在我希望 Apache 的某个人尽快包含它,然后最终该shadeTestJar功能可以按预期工作。

于 2018-04-02T20:29:04.517 回答
5

我设法通过添加使其工作:

<plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>build-helper-maven-plugin</artifactId>
     <version>1.9.1</version>
     <executions>

        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
               <goal>add-source</goal>
            </goals>
            <configuration>
               <sources>
                   <source>${project.basedir}/src/test/java/</source>
               </sources>
            </configuration>
        </execution>

      </executions>
</plugin>
于 2015-03-24T22:10:08.050 回答
1

尝试include像这样测试您的测试包:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>1.2.2</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <artifactSet>
          <includes>
            <include>org.apache.maven:*</include>
          </includes>
        </artifactSet>
      </configuration>
    </execution>
  </executions>
</plugin>
于 2011-03-01T03:13:03.257 回答
1

使用maven-shade-plugin上面的 ~steve-k 解释是正确的,不幸的是,由于错误shadeTestJar不起作用,并且生成的测试 JAR 是空的。

于 2018-04-02T19:26:25.243 回答