我现在在运行 junit 测试时正在与 Eclipse 版本 2024.9 作斗争。 当我去运行我们的 Junit 4(是的,旧的)测试时,它抱怨非常不透明的错误消息:
Reference to undefined variable argLine
经过一段时间的研究,我发现在相关 Junit 测试的运行配置下,VM 参数窗口中不仅有
-ea
,还有一大堆附加参数,包括 ${argLine}
。 好的,很好。 但我不知道这是从哪里来的。 当我删除该配置并重新运行时,额外的参数又回来了。
完整的参数列表如下。 您可以看到其中有一些明显的调试标志,如果进行一些分析或删除调试,我可能会设置这些标志。 但话又说回来,他们从哪里来?
-ea
${argLine} -javaagent:${com.github.jbellis:jamm:jar}
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n
-Djava.net.preferIPv4Stack=true -Xms512m -Xmx1g -DMHUB_DEV=true
我做了一些搜索,发现人们在谈论已安装的 JRE -> 编辑 -> 默认 VM 参数,但我的 JRE 都没有任何参数。
如果我在工作区配置中对“argLine”和“agentlib”进行
grep -r
,以查看它是否在某种插件配置或其他内容中。 我看到它出现在测试运行配置中,但没有出现在其他地方。 我在环境中和我能找到的任何 maven pom 插件配置中都没有看到它。 我尝试过重新启动 Eclipse。
还有其他想法吗? 预先感谢。
Eclipse 2024-09 包括 m2e 2.6.2,其中添加了一项新功能,其中来自 Maven Surefire 插件的参数将被传播到运行配置。
因此,如果您的 pom.xml 包含用于在surefire或failsafe插件中进行测试的CLI参数(类似于以下内容),这些参数将被复制:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>
your arguments here
</argLine>
</configuration>
</plugin>
如果这些参数在父 POM 中定义(引用 pom.xml 中另一个工件的
<parent>
元素),这些参数也会被传播。要检查这一点,您可以在 Eclipse 中打开 pom.xml
并打开 Effective POM
选项卡:
这应该向您显示完整有效的 pom.xml,其中还包括来自父 POM 的内容。
如果您从 pom.xml 中删除启动时出错的参数,并通过右键单击项目并选择 Maven > 更新项目 来更新 Maven 项目,它应该会停止尝试使用这些参数。
如果这是 Eclipse 无法插入某些属性的错误,请在 m2e 中创建一个问题,包括最小的
pom.xml
重现它。