Java 从maven项目发布测试UTIL

Java 从maven项目发布测试UTIL,java,unit-testing,maven-2,hamcrest,Java,Unit Testing,Maven 2,Hamcrest,我在maven中创建了一个库,可以通过实现一些接口进行扩展。为了测试默认实现,我编写了一些hamcrest Matcher,它们目前位于src/test/java中 然而,我认为如果库的用户想要测试他们的定制,它们可能会很有用 那么,我怎样才能使它们可用呢?将它们移动到src/main需要使hamcrest成为运行时依赖项,我不希望这样。听起来您需要将它们移动到自己的项目中并发布它。从那里,您可以在原始项目中确定您想要的范围。听起来您需要将他们移动到他们自己的项目中并发布它。从那里,您可以在原始

我在maven中创建了一个库,可以通过实现一些接口进行扩展。为了测试默认实现,我编写了一些hamcrest Matcher,它们目前位于
src/test/java

然而,我认为如果库的用户想要测试他们的定制,它们可能会很有用


那么,我怎样才能使它们可用呢?将它们移动到
src/main
需要使hamcrest成为运行时依赖项,我不希望这样。

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

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

如您所说,在新项目中将其移动到src/main。让该项目仅在测试依赖项中使用,并且不会污染模块的类路径。

如您所说,在新项目中将其移动到src/main。让该项目只在测试依赖项中使用,并且不会污染模块的类路径。

有一种方法可以创建测试jar,并使用命令“mvn jar:test jar”将其安装到存储库中。然后,其他项目可以使用依赖项块中的testjar修饰符引用这个jar

如果您想将此jar作为普通“mvn安装”构建的一部分进行构建和安装,请在pom中添加以下插件配置:


org.apache.maven.plugins
maven jar插件
2.2
试验罐
然后其他项目可以参考测试jar,如下所示:

<dependency>
  <groupId>com.myco.app</groupId>
  <artifactId>foo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

com.myco.app
福
1.0-快照
试验罐
测试

有一种方法可以创建一个测试jar,并使用命令“mvnjar:testjar”将其安装到存储库中。然后,其他项目可以使用依赖项块中的testjar修饰符引用这个jar

如果您想将此jar作为普通“mvn安装”构建的一部分进行构建和安装,请在pom中添加以下插件配置:


org.apache.maven.plugins
maven jar插件
2.2
试验罐
然后其他项目可以参考测试jar,如下所示:

<dependency>
  <groupId>com.myco.app</groupId>
  <artifactId>foo</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

com.myco.app
福
1.0-快照
试验罐
测试

但这会导致循环依赖,不是吗?这就是我一直在使用的解决方案。我不确定哪里会是循环依赖?不一定。您始终可以将建议的循环依赖项声明为提供的范围,或将其排除在依赖于它的项目上。有很多方法可以解决这个问题,testutil项目依赖于主项目,而主项目测试依赖于testutil。为了确保我理解正确,您是说解决这个问题的最佳方法是让test util依赖main作为“提供的”?嗯,我不确定。这显然不是一个理想的解决方案,但我不知道你还能做什么。但这会导致循环依赖,不是吗?这就是我一直在使用的解决方案。我不确定哪里会是循环依赖?不一定。您始终可以将建议的循环依赖项声明为提供的范围,或将其排除在依赖于它的项目上。有很多方法可以解决这个问题,testutil项目依赖于主项目,而主项目测试依赖于testutil。为了确保我理解正确,您是说解决这个问题的最佳方法是让test util依赖main作为“提供的”?嗯,我不确定。这显然不是一个理想的解决方案,但我不知道你还能做什么。