为什么这个autorun-cmd注册表黑客会影响java / maven进程?

时间:2013-04-27 08:15:56

标签: java maven maven-2 registry maven-surefire-plugin

HKEY_CURRENT_USER \ Software \ Microsoft \ Command Processor \ Autorun的存在会导致java测试失败。 Github回购测试结果: https://github.com/ajorpheus/final-frontier

这是 this 发生后的后续问题。

摘要:显然是 registry hack ,它允许在每次打开cmd提示符时运行命令,这会对Java进程产生负面影响。

首先我想,也许是因为'mvn clean test'实际上解析为'mvn.bat clean test'。但是,我尝试解压缩mvn.bat文件中包含的java.exe命令,并尝试直接使用它,但遇到了同样的问题。

有关为何会发生这种情况的任何想法?

更新

自动运行条目的值为:cd /d "c:\dev"

错误信息如下:
java.lang.RuntimeException: Error writing to file: some-dir/target/generated-resources/stuff.xmlwith the following error: Couldn't create dir: some-dir\target\generated-resources at com.test.build.TestFileCreation.createDirectoryTest

UPDATE2

正如@NilsH建议的那样,我已经确认两个案例中的current working directory是相同的。

UPDATE3

Added maven个人资料,它将maven-surefire-plugin的forkMode设置为never。无论注册表是否存在,此配置文件都会导致测试通过。

1 个答案:

答案 0 :(得分:2)

当surfire插件在分叉环境中执行测试时,它会启动一个新的cmd进程。对于此环境,注册表hack会将工作目录设置为“c:\ dev”,并且JVM从内部启动。

parent.exists()

解析启动JVM的目录的路径。这意味着测试检查文件“C:/dev/some-dir/target/generated-resources/stuff.xml”的存在。

parent.getAbsoluteFile().exists()

这将检查文件是否存在绝对名称,即您希望检查的名称。

另请参阅评估此JDK错误的评论 4483097 : File returned by getAbsoluteFile() may not refer to the original file