0

我正在尝试在我的 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]

故障安全插件网站声明该标签应该具有我groupId:artifactId所拥有的价值。任何想法为什么这会失败?

第二次更新:刚刚意识到故障安全插件网页中有一个错字。在他们的例子中:

  <classpathDependencyExcludes>
    <classpathDependencyExcludes>org.apache.commons:commons-email</classpathDependencyExcludes>
  </classpathDependencyExcludes>

真的应该

  <classpathDependencyExcludes>
    <classpathDependencyExclude>org.apache.commons:commons-email</classpathDependencyExclude>
  </classpathDependencyExcludes>

现在我可以通过解析错误,但是 jbossall-client 仍然被加载到类路径中。

4

1 回答 1

0

我已经找到了问题,classpathDependencyExclude 标记按预期工作。我愚蠢地排除了错误的 groupId(当传递依赖是 jboss:jbossall-client 时,我排除了 org.jboss.client:jbossall-client)。我观察到的另一件事是 jbossall-client 是第 3 级传递依赖项(即,它是直接依赖项的第二个子项;myproject -> A -> B -> jbossall-client),它在父 pom 中定义一个 Maven 子模块(在我的示例中 B 是一个更大项目的子模块)。当我使用依赖插件检查 maven 依赖时,它报告实际项目依赖不包括 jbossall-client。但是由于某种原因,集成测试阶段似乎将其包含在类路径中。我将进一步调查,但现在黑客工作。

于 2012-09-13T14:36:42.123 回答