gpt4 book ai didi

java - Maven 排除不起作用

转载 作者:行者123 更新时间:2023-12-01 04:34:15 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目具有 JUnit 4.11 的依赖项和 JMock 2.6.0-RC2 的传递依赖项,而 JMock 2.6.0-RC2 又具有 的依赖项>JUnit-dep 4.4JUnit-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) 添加到我的类(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 的“依赖关系层次结构”选项卡时,我发现 JUnit 的 1 已解决的依赖关系:4.11 以及多个(因与 4.11 冲突而被省略)版本左边。此外,还有来自 jmock-junit4: 2.6.0-RC2 的 junit-dep 4.4 已解决的依赖项但是我已将此依赖项标记为排除(右键单击 + 排除 Maven Artifact...)。此外,由于与我自己对 JMock 2.1.0 的调用发生冲突,JMock 本身被标记为已忽略。

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

编辑:添加 junit-dep 4.10 的依赖项“修复”了该问题,最终消除了 4.4 版本的麻烦。但这似乎更像是一种黑客行为,而不是解决方案。

最佳答案

看起来您的构建路径上的某个地方仍然有 JUnit 4.3(或至少是 4.5 之前的版本)。请参阅NoSuchFieldError when trying to run a jUnit test with Spring了解更多详情。

关于java - Maven 排除不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17560153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com