私の問題は、単に .ear ファイルを再帰的に展開するだけではないことが判明しました (そのための Java クラスを作成しました。再帰によって簡単になりました)。.ear ファイルが展開されたら、ディレクトリを比較して変更を確認する必要があります。タイムスタンプ以外のものが変更された場合、ビルドが別のバイナリを生成していることがわかります。
2 つ目の問題は、ビルド プロセスで何百もの .xml ファイルが生成され、その後のビルドでそれらの .xml ファイルが要素の順序が異なる状態で再生成されることです。理由はわかりません。バックツーバック ビルドで作成された 2 つの .ear ファイルを何も変更せずに展開すると、結果のディレクトリの diff には、機能的には同等であるにもかかわらず、数百の .xml ファイルが表示されます。
.ear ファイルを再帰的に展開するだけでなく、特定のディレクトリ内の .xml ファイルを比較して除外する必要があります。Cygwin diff がこれを行うと思っていましたが、 --exclude スイッチはパス情報を認識しません:
ディレクトリがパターンに含まれている場合、Cygwin diff はファイルを除外しません
これに対する解決策が見つからない場合は、別の Java クラスを作成して、ディレクトリ構造全体をステップ実行し、各ディレクトリで単一レベルの差分を実行し、適切なディレクトリの .xml ファイルを除外します。
車輪を再発明しているような気がしますが、今は車輪が見つかりません。