为什么自动运行cmd注册表黑客会影响java/maven进程?

为什么自动运行cmd注册表黑客会影响java/maven进程?,java,maven,maven-2,registry,maven-surefire-plugin,Java,Maven,Maven 2,Registry,Maven Surefire Plugin,HKEY\U当前\U用户\Software\Microsoft\Command Processor\Autorun的存在会导致java测试失败。Github repo对此进行了测试: 这是发生后的后续问题 摘要:显然,允许在每次打开cmd提示符时运行命令,这会对Java进程产生不利影响 首先,我想,也许是因为“mvn清洁测试”实际上分解为“mvn.bat清洁测试”。但是,我尝试提取mvn.bat文件中包含的java.exe命令,并尝试直接使用该命令,但遇到了相同的问题 有没有想过为什么会发生这种

HKEY\U当前\U用户\Software\Microsoft\Command Processor\Autorun的存在会导致java测试失败。Github repo对此进行了测试:

这是发生后的后续问题

摘要:显然,允许在每次打开cmd提示符时运行命令,这会对Java进程产生不利影响

首先,我想,也许是因为“mvn清洁测试”实际上分解为“mvn.bat清洁测试”。但是,我尝试提取mvn.bat文件中包含的java.exe命令,并尝试直接使用该命令,但遇到了相同的问题

有没有想过为什么会发生这种情况

更新 自动运行项的值为:
cd/d“c:\dev”

错误消息如下:
java.lang.RuntimeException:写入文件时出错:some dir/target/generated resources/stuff.xml,错误如下:无法在com.test.build.TestFileCreation.createDirectoryTest创建目录:some dir\target\generated resources

更新2 正如@NilsH所建议的,我已经证实了这两种情况下的结果是相同的

更新3
将maven surefire插件的forkMode设置为never的maven配置文件。无论注册表黑客是否存在,此配置文件都会导致测试通过。

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

parent.exists()
根据启动JVM的目录解析路径。这意味着测试将检查文件“C:/dev/some dir/target/generated resources/stuff.xml”是否存在

这将使用文件的绝对名称(您希望检查的名称)检查文件的存在

另请参见此归档JDK错误的评估注释

注册表项的值是多少?什么是错误?@NilsH,用细节更新了我的答案。Github repo的自述文件中也有这些内容:尝试添加
System.out.println(新文件(“./”.getAbsolutePath())和se在这两种情况下实际工作目录是什么。这可能会给我们一些启示。(我没有Windows,所以无法测试)@NilsH,两种情况下当前工作目录的绝对路径相同。我推了一个例子来说明这一点。
当冲浪插件在分叉环境中执行测试时,它会启动一个新的cmd进程
,是否有可能对此有权威的参考?谢谢@AshutoshJindal您好,当您在调试模式下运行maven时,您会看到一个新的cmd调用<代码>[DEBUG]启动类路径:d:\maven\repository\org\apache\maven\surefire\surefire booter\2.14.1\surefire-booter-2.14.1.jar。。。Forking命令行:cmd.exe/X/C“C:\PROGRA~1\Java\jdk170\jre\bin\Java-jar…
我使用JNI设置了一个小项目,以获取调用JVM的目录。那正是我要找的!感谢您抽出时间调查此事。太棒了@AshutoshJindal感谢你的赏金积分。调查和建立这个小项目对我来说是一种乐趣。
parent.getAbsoluteFile().exists()