我正在尝试在我的java项目中使用maven设置集成测试阶段。我对jboss没有任何依赖性(jboss-common-core除外,它由hibernate-entitymanager传递)。我对故障安全插件的设置是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
当我运行mvn integration-test -Dmaven.failsafe.debug
并连接我的调试器并评估System.getProperty("java.class.path")
时,我在类路径中看到了一个jbossall-client.jar!当我在IntellJ 122.327中本地运行测试时,类路径不包含jbossall-client.jar。我一直试图弄清楚为什么这个jar被添加到类路径中。有没有其他人经历过这个?提前谢谢。
更新:我尝试从我的.m2 / repository目录中删除jbossall-client并仅运行clean和package阶段,看起来我的项目确实依赖于此,因为这个jar在运行包时被下载。仍然很奇怪,因为我的pom对这个jar没有直接或传递依赖。此外,当我尝试通过添加配置
运行故障安全插件时将其排除在类路径中<classpathDependencyExcludes>org.jboss.client:jbossall-client</classpathDependencyExcludes>
我收到以下错误:
Unable to parse configuration of mojo org.apache.maven.plugins:maven-failsafe-plugin:2.12:integration-test
for parameter classpathDependencyExcludes: Cannot assign configuration entry 'classpathDependencyExcludes'
with value 'org.jboss.client:jbossall-client' of type java.lang.String
to property of type java.util.List -> [Help 1]
failsafe plugin website表示标记应具有值groupId:artifactId
,这就是我所拥有的。任何想法为什么会失败?
第二次更新:刚刚意识到故障安全插件webpage中存在拼写错误。在他们的例子中:
<classpathDependencyExcludes>
<classpathDependencyExcludes>org.apache.commons:commons-email</classpathDependencyExcludes>
</classpathDependencyExcludes>
应该是
<classpathDependencyExcludes>
<classpathDependencyExclude>org.apache.commons:commons-email</classpathDependencyExclude>
</classpathDependencyExcludes>
现在我可以传递解析错误,但jbossall-client仍然被加载到类路径中。
答案 0 :(得分:0)
我已经找到了问题,classpathDependencyExclude标记按预期工作。我愚蠢地排除了错误的groupId(我排除了org.jboss.client:jbossall-client,当传递依赖是jboss:jbossall-client时)。我观察到的另一件事是jbossall-client是一个第三级传递依赖(即它是直接依赖的第二个孩子; myproject - &gt; A - &gt; B - &gt; jbossall-client),它是在maven子模块的父pom(在我的例子中B是一个较大项目的子模块)。当我使用依赖插件检查maven依赖时,它报告实际项目依赖项不包括jbossall-client。但是由于某种原因,集成测试阶段似乎将它包含在类路径中。我将进一步调查,但现在黑客工作。