gpt4 book ai didi

maven - 为什么测试在我的 Jenkins-Sonar 插件中失败,但在 Jenkins-Maven 运行期间却没有?

转载 作者:行者123 更新时间:2023-12-04 18:23:21 25 4
gpt4 key购买 nike

我在 CentOS 上运行 Jenkins 1.478,使用 Java 6、Maven 3.0.4、JUnit 4.8.1(依赖于 Maven 项目)和 Sonar 3.2.1。我有我的 Jenkins Maven 2/3 作业设置以在它完成后运行 Sonar(设置目标“clean package -Pdev”)。该项目是一个包含 WAR 和 EAR 模块的多模块项目。然而,当插件的 Sonar 部分运行时,许多测试会因如下错误而终止……

java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at org.parentco.myco.client.test.AbstractHibernateDaoTest.loadmyprojectProps(AbstractHibernateDaoTest.java:252)
at org.parentco.myco.client.test.AbstractHibernateDaoTest.setupMockEjbContainer(AbstractHibernateDaoTest.java:235)
at org.parentco.myco.client.test.AbstractHibernateDaoTest.setupBeforeClass(AbstractHibernateDaoTest.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

异常来自这个代码块的最后一行......

    final InputStream in = AbstractHibernateDaoTest.class.getClassLoader().getResourceAsStream("myproject.properties");
final Properties props = new Properties();
props.load(in);

测试在我工作的 Maven 部分运行完美。有问题的文件位于

./myclient-war/src/main/resources/myproject.properties

有人知道我该如何进一步解决这个问题吗?我更愿意在 Sonar 中配置一些东西,而不是必须重组我的整个项目以适应 Sonar,但我愿意接受建议。

最佳答案

这可能是由于 Sonar 创建了一个单独的类加载器来运行每个测试,尽管我不太确定。

我相信所有失败的测试都遵循层次结构?

YourTestClass extends AbstractHibernateDaoTest

尝试使用 YourTestClass 的直接测试类的类加载器加载文件,而不是总是尝试使用 AbstractHibernateDaoTest 的类加载器加载它

尝试将您的代码更改为,

final InputStream in = this.getClass().getClassLoader()
.getResourceAsStream("myproject.properties");
final Properties props = new Properties();
props.load(in);

这将确保您获取的是实际测试类的类对象而不是抽象类,以及直接类的类加载器而不是已经加载的类。

更新:我我觉得正在发生的事情是,无论您的代码中使用什么类加载器来加载资源,都无法看到 Maven 的类加载器。请注意,在您的案例中,Maven 尤其是 maven-surefire-plugin 负责设置正确的类路径。它将在类路径中添加 src/main/resources 目录。

关于maven - 为什么测试在我的 Jenkins-Sonar 插件中失败,但在 Jenkins-Maven 运行期间却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826098/

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