0

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun が存在すると、Java テストが失敗します。これをテストするための Github リポジトリ: https://github.com/ajorpheus/final-frontier

これは、これが起こった後のフォローアップの質問です。

概要 : どうやら、cmd プロンプトが開かれるたびにコマンドを実行できるようにするレジストリ ハックが、Java プロセスに悪影響を及ぼすようです。

そもそも、「mvn clean test」が実際には「mvn.bat clean test」に解決されてしまうのではないかと思いました。ただし、mvn.batファイルに含まれるjava.exeコマンドを抽出して、それを直接使用しようとしましたが、同じ問題が発生しました。

なぜこれが起こっているのかについて何か考えはありますか?

アップデート

Autorun エントリの値は次のとおりです。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 が示唆したように、両方のケースで現在の作業ディレクトリが同じであることを確認しました。

Update3

maven-surefire-plugin の forkMode を never に設定する maven プロファイルを追加しました。このプロファイルにより、レジストリ ハックがあるかどうかに関係なく、テストに合格します。

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 に答える