Maven对我的testclasspath做了什么
我遇到了一个测试的问题,在maven中执行时无法初始化log4j,尽管有效的log4j.properties在src/test/resources中,因此应该在测试的类路径上结束。但它没有,即log4j只打印Maven对我的testclasspath做了什么,maven,log4j,classpath,surefire,Maven,Log4j,Classpath,Surefire,我遇到了一个测试的问题,在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
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
为了调试这个问题,我使用
但是我得到的不是一个长长的罐子和路径列表
/<projectpath>/target/surefire/surefirebooter6226797341642271676.jar
我找到了问题1的答案 Maven在运行中创建了一个具有奇怪名称的jar,并在其中放置了一个MANIFEST.MF文件。该文件包含类路径和要启动的主类 这也回答了一些问题3 当maven运行时,您可以将该jar文件复制到其他地方,这样一旦完成,它就不会删除它。然后你可以随时检查它。原来我的log4.properties在类路径上(TestClass的目标目录在那里,属性文件在该目录中……) 给我留下问题2 结果发现,在pom.xmls的林中,系统属性log4j.configuration被设置为一个相当无用的值。如前所述,将该值设置回正确的值解决了我眼前的问题 现在我只需要在我们的POM中找到断点,但这是另一天的故事。仔细看一下。默认情况下,它会创建一个装满整个类路径的jar。这由
useMistenceOnlyJAR
选项控制。这解决了Windows类路径限制为1024的问题(引用我的话)。在Linux下,您不会真正感受到这种痛苦,因为限制要高得多
如果您正在分叉maven surefire插件,它将使用与您正在运行的maven(以及编译)不同的类路径
调试这种糟糕的情况可以按如下方式进行:
- 在一个测试中,添加一个循环,该循环列出所有环境变量以及java系统属性
- 调试测试:
mvn -Dmaven.surefire.debug="-Xdebug \ -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9001 \ -Xnoagent" \ test
mvn -Dmaven.surefire.debug="-Xdebug \
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9001 \
-Xnoagent" \
test