gpt4 book ai didi

maven - Maven 对我的 testclasspath 做了什么

转载 作者:行者123 更新时间:2023-12-01 02:27:03 24 4
gpt4 key购买 nike

我遇到了一个测试问题,在 maven 中执行该测试时无法初始化 log4j,尽管有效的 log4j.properties 位于 src/test/resources 中,因此应该最终出现在测试的类路径中。但它没有,即 log4j 只打印

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.

为了调试问题,我从测试本身打印了类路径,使用 the code here

但是我得到的不是一长串的 jar 和路径
/<projectpath>/target/surefire/surefirebooter6226797341642271676.jar

所以我的问题是:
  • WTF 是 maven 处理类路径吗?
  • 为什么我的 log4j.properties 没有出现在类路径中?
  • 我该如何调试?

  • 注意:在 Eclipse 中,我可以很好地运行测试,并且一切都按预期工作。

    另一个注意事项:maven 项目是一个多模块项目,我只从单个子模块执行单个测试,命令行如下:
    mvn -U -Dtest=de.company.project.SomeTest clean test

    最佳答案

    好好看看maven-surefire-plugin .默认情况下,它会创建一个装满整个类路径的 jar。这由 useManifestOnlyJar 控制。选项。这解决了 Windows 的类路径限制为 1024 的问题(引用我的头顶)。在 Linux 下,您不会真正感受到这种痛苦,因为限制要高得多。

    如果您要 fork maven-surefire-plugin,它将使用与您正在运行 Maven(和编译)的类路径不同的类路径。

    调试这种蹩脚的情况可以如下进行:

  • 在您的一个测试中添加一个循环,列出所有环境变量以及 java 系统属性。
  • 调试测试:
    mvn -Dmaven.surefire.debug="-Xdebug \
    -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9001 \
    -Xnoagent" \
    test
  • 关于maven - Maven 对我的 testclasspath 做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496148/

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