Maven 排除不起作用


我正在从事一个项目,该项目的依赖关系为 JUnit 4.11,传递依赖关系为 JMock 2.6.0-RC2,而

又具有 JUnit-dep 4.4 的依赖关系。JUnit-dep的这种传递依赖性正在覆盖我本地pom中的设置JUnit。通过重写,我的意思是当我调用 JUnit 方法时,它会调用 v4.4 而不是 v4.11 中的方法。为JMockJUnit-dep添加排除项对我解析的依赖项没有影响。

注意:JUnitJUnit-dep具有单独的artifactId,因此使用一个不会省略另一个。


以前的问题: JUnit 注释不起作用

我正在尝试使用 JUnit 的ExpectedException规则运行测试,但当我运行测试时,该规则似乎没有运行。在下面的代码中,异常直接通过并失败测试,如果规则不存在,人们会期望。

我最近将项目的 Maven 依赖项从 4.3.1 更改为 4.11。我还对工作区进行了干净的构建。我应该研究哪些步骤来解决这个问题?来自 Maven 的垃圾依赖会让跑步者感到困惑吗? 我怎么知道我正在运行 4.11?

@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void throwsNullPointerException() {
    thrown.expect(NullPointerException.class);
    throw new NullPointerException();
}

编辑:

我不知道它是否有帮助,但是将@RunWith(BlockJUnit4ClassRunner.class)添加到我的班级顶部让我得到了这个:

java.lang.NoSuchFieldError: NULL
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:57)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

编辑:

在 Eclipse 中通过 m2e 查看依赖关系:当我检查我的 pom 的依赖关系层次结构选项卡时,我在左侧列出了 1 个 JUnit 的已解决依赖关系:4.11 和多个(因与 4.11 冲突而省略(版本。此外,还有一个来自 jmock-junit4: 2.6.0-RC2 的 junit-dep 4.4 的已解决依赖项但是我已将此依赖项标记为已排除 ( Right-click + Exclude Maven Artifact... (。此外,JMock 本身被标记为省略,因为与我自己对JMock 2.1.0的调用冲突。

编辑: Ctrl+Shift+T RunWith显示2个版本,4.4和4.11,尽管排除在外。

编辑:添加依赖项 junit-dep 4.10"修复"了问题,最终省略了制作 4.4 版本的麻烦。然而,这似乎更像是一种黑客而不是解决方案。

看起来您的构建路径上仍有 JUnit 4.3(或至少在 4.5 之前(。有关更多详细信息,请参阅 NoSuchFieldError 尝试使用 Spring 运行 jUnit 测试时。

最新更新