既存の Ant ビルド スクリプト内で Java Web アプリ コードを難読化しようとしていますが、単体テストに関する問題が発生しています。コードがコンパイルされた直後、jar される前、および単体テストが実行される前に、コードを難読化しています。
ただし、テスト コードではなく実稼働コードを難読化すると、難読化ツールによって名前が変更されたために存在しなくなったメソッドを呼び出そうとするため、すべてのテストが失敗します。特定のメソッドを難読化しないようにマークして、テスト スイートなどの外部システムで使用できるようにすることができます。
テスト クラスも難読化すると、次の 2 つの問題が発生します。
1: 本番クラスとテスト クラスが同じ出力ディレクトリにマージされ、本番 .jar ファイルからテスト クラスを除外できません。
2: 通常の Ant バッチテスト コールを実行できません。
<batchtest todir="${basedir}/reports">
<fileset dir="${basedir}/components/common/build-zkm">
<include name="**/*Test.class"/>
</fileset>
</batchtest>
難読化ツールがテストの名前を変更したためです。
結果の .war/.ear ファイルに対して難読化ツールを実行することもできますが、難読化ツールによって引き起こされたバグを排除するために、変更されたコードに対して単体テストを実行したいと考えています。
私は現在、Zelix KlassMaster を使用していますが、まだ評価段階にあるので、他のオプションがより適切に機能する場合は、それを受け入れます。