我使用 shade maven 插件来构建我的项目,以便它的所有依赖项都包含在一个 jar 中(这使得它更容易在 Hadoop 上运行)。Shade 似乎默认排除了我的测试代码,这是可以理解的。因为我想对我的集群运行集成测试,所以我希望设置另一个配置文件来为此目的构建一个单独的 jar。有没有办法配置这个插件也包括测试代码?
5 回答
使用 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?
最后几个答案充其量是针对损坏功能的混乱解决方法。事实仍然是maven-shade-plugin
. 与此同时,我已经调查并从根本上导致了这个错误,并创建了一个补丁. 现在我希望 Apache 的某个人尽快包含它,然后最终该shadeTestJar
功能可以按预期工作。
我设法通过添加使其工作:
<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>
尝试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>
使用maven-shade-plugin
上面的 ~steve-k 解释是正确的,不幸的是,由于错误shadeTestJar
不起作用,并且生成的测试 JAR 是空的。