我在maven中创建了一个可以通过实现一些接口进行扩展的库。为了测试默认实现,我编写了一些目前生活在src/test/java
的hamcrest匹配器。从maven项目发布测试工具
但是,我认为如果他们想测试自定义,他们可能对图书馆的用户有用。
那么我该如何让它们可用?将它们移动到src/main
将需要使运行时依赖性成为Hamcrest,我不希望这样做。
我在maven中创建了一个可以通过实现一些接口进行扩展的库。为了测试默认实现,我编写了一些目前生活在src/test/java
的hamcrest匹配器。从maven项目发布测试工具
但是,我认为如果他们想测试自定义,他们可能对图书馆的用户有用。
那么我该如何让它们可用?将它们移动到src/main
将需要使运行时依赖性成为Hamcrest,我不希望这样做。
有一种方法可以创建一个测试jar并使用命令'mvn jar:test-jar'将其安装到存储库中。这个jar然后可以被其他项目在依赖块中使用test-jar修饰符引用。
如果你想拥有这个罐子建造和安装为您的正常的一部分,“MVN安装”构建以下插件配置添加到您的POM:
从http://maven.apache.org/guides/mini/guide-attached-tests.html
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
然后其他项目可以参考测试瓶如下:
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
听起来你需要将它们移动到他们自己的项目并发布它。从那里你可以在原始项目中确定你想要的范围。
正如你所说,把它移到一个新项目的src/main中。让该项目仅用于测试依赖项,并且不会污染模块的类路径。
但是这会导致循环依赖,不是吗? – Cephalopod 2010-12-14 22:39:58
这是我一直在使用的解决方案。我不确定哪里会是循环依赖? – 2010-12-15 03:48:45
不一定。您可以随时将提议的循环依赖项声明为提供的范围,或者将其排除在依赖于它的项目上。有很多方法可以解决这个问题。 – javamonkey79 2010-12-15 06:50:27