Maven排除不起作用

时间:2013-07-09 23:44:48

标签: java maven junit annotations transitive-dependency

我正在处理一个项目,该项目的依赖关系为JUnit 4.11,而JMock 2.6.0-RC2的传递依赖关系依赖于JUnit-dep 4.4JUnit-dep的这种传递依赖性覆盖了JUnit的本地pom中的设置。通过重写,我的意思是当我调用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的Dependency Hierarchy选项卡时,我为JUnit提供了1 Resolved Dependency :4.11和多个(因为与4.11冲突而被忽略)的版本剩下。此外,来自jmock-junit4: 2.6.0-RC2 的junit-dep 4.4还有已解决的依赖关系但是我已将此依赖关系标记为已排除(Right-click + Exclude Maven Artifact...)。此外,由于与我自己调用JMock 2.1.0的冲突,JMock本身被标记为ommited。

修改 Ctrl+Shift+T RunWith显示了2个版本,4.4&amp; 4.11尽管有例外情况。

修改 添加junit-dep 4.10“依赖”“修复”问题,最后省略制作4.4版本的麻烦。然而,这似乎更像是一种破解而非解决方案。

1 个答案:

答案 0 :(得分:0)

看起来你的构建路径上仍然有JUnit 4.3(或者至少是4.5之前的版本)。有关详细信息,请参阅NoSuchFieldError when trying to run a jUnit test with Spring