2010-12-14 119 views
1

我在maven中创建了一个可以通过实现一些接口进行扩展的库。为了测试默认实现,我编写了一些目前生活在src/test/java的hamcrest匹配器。从maven项目发布测试工具

但是,我认为如果他们想测试自定义,他们可能对图书馆的用户有用。

那么我该如何让它们可用?将它们移动到src/main将需要使运行时依赖性成为Hamcrest,我不希望这样做。

回答

4

有一种方法可以创建一个测试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> 
1

听起来你需要将它们移动到他们自己的项目并发布它。从那里你可以在原始项目中确定你想要的范围。

+0

但是这会导致循环依赖,不是吗? – Cephalopod 2010-12-14 22:39:58

+0

这是我一直在使用的解决方案。我不确定哪里会是循环依赖? – 2010-12-15 03:48:45

+0

不一定。您可以随时将提议的循环依赖项声明为提供的范围,或者将其排除在依赖于它的项目上。有很多方法可以解决这个问题。 – javamonkey79 2010-12-15 06:50:27

1

正如你所说,把它移到一个新项目的src/main中。让该项目仅用于测试依赖项,并且不会污染模块的类路径。