0

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun 的存在会导致 java 测试失败。Github repo 对此进行测试:https ://github.com/ajorpheus/final-frontier

这是这件事发生后的后续问题。

摘要: 显然,允许在每次打开 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

更新2

正如@NilsH 建议的那样,我已经确认这两种情况下的当前工作目录是相同的。

更新3

添加了一个 maven 配置文件,它将 maven-surefire-plugin 的 forkMode 设置为 never。无论注册表黑客是否存在,此配置文件都会导致测试通过。

4

1 回答 1

2

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

parent.exists()

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

parent.getAbsoluteFile().exists()

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

另请参阅此提交的 JDK 错误
4483097 的 EVALUATION 注释:getAbsoluteFile() 返回的文件可能不引用原始文件

于 2013-04-29T18:55:42.583 回答