2

私のコードには、ディレクトリを作成し、その中にファイルを作成するテストがあります。

ただし、ファイルを書き込むテストの部分が、作成されたディレクトリを見つけることができないため、このテストは失敗します。それを修正する唯一のことは、surefire プラグインを次のようにフォークしないように設定することです。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <forkMode>never</forkMode>
    </configuration>
</plugin>

この修正は、ある JVM プロセスでディレクトリが作成され、別の JVM プロセス/スレッドでファイルが作成されることを意味すると解釈できますか?

このテストの失敗は、最近失敗し始めた単一のマシンに分離されています。

私が試したいくつかのことは次のとおりです。

  1. システムには多数の JDK バージョンが存在していたため、他の多くのシステムで動作していたバージョン ( 1.6.0_19 ) を除いてすべて削除しました。
  2. 管理者コマンドプロンプトからそのプロジェクトで「mvn test」を実行しようとしました。
  3. 親ディレクトリの権限に問題がないことを確認しました。
  4. プロジェクト全体を最初からチェックアウトして、同じことを試みました。
  5. これが発生しているディレクトリが、AntiVirus のオンアクセス スキャナから除外されていることを確認しました。

上記のどれも効果がないようです。唯一の違いは構成<forkMode>です。テストの周りやテストしている機能にコードの変更がまったくないのに、なぜそのテストが突然機能しなくなったのかわかりません。

使用されている maven-surefire-plugin のバージョンは2.12.4です。「never」構成が欠落している場合、最新 (2.14.1) に更新してもテストは修正されません。

<forkMode>非推奨ですが、バージョン 2.14 以降のみです。

根本的な問題が何であるかについて、私は本当に興味をそそられます。最終的な結論が、これが HDD やハードウェアの問題であるという単純なものではないことを願っています。

4

1 に答える 1

0

tl;dr: 修正済み!

ユーザーのために別の真新しいマシンが構築されました。1時間ほどは問題なく動作しましたが、その後、見よ、まったく同じ問題が発生しました。

一般的なコンセンサスは、不正な Windows アップデートであるに違いないというものでした。そのため、マシンを以前の状態に戻すなど、いくつかのことを試しました。Windowsの更新を手動でアンインストールするなど、何も機能しませんでした。

その後、マシンの所有者はひらめきました。どうやら、彼はこのレジストリ ハッキングに慣れていたようで、それがこの不可解なエラーの原因でした。私たちはそれを元に戻し、mvn clean install はうまくいきました!

なぜそれがJavaプロセスに影響を与えるのかについてはまだ非常に興味があります. (問題のあるコードを分離するために gihub リポジトリを完成させてください。)

有益なコメントをありがとう。

于 2013-04-27T08:17:05.163 に答える