Java ソース コードのバージョン (この場合は svn $Id$ 文字列) を、生成されたクラス ファイルに埋め込みたいと考えています。
できれば文字列または what コマンドを実行して、クラス ファイルの静的検査からこの情報を特定できるようにしたいと考えています。
各クラス内でこの値に設定された private final static String 変数を宣言しようとする素朴な試みは、クラス ファイルに埋め込まれた判読可能な文字列をもたらしませんでした。
Java ソース コードのバージョン (この場合は svn $Id$ 文字列) を、生成されたクラス ファイルに埋め込みたいと考えています。
できれば文字列または what コマンドを実行して、クラス ファイルの静的検査からこの情報を特定できるようにしたいと考えています。
各クラス内でこの値に設定された private final static String 変数を宣言しようとする素朴な試みは、クラス ファイルに埋め込まれた判読可能な文字列をもたらしませんでした。
あなたは言った...できれば文字列またはどのコマンドを実行することによって...
コードに次のようなものがあるとします。
private static final String SVN_ID =
"$Id: SvnIdDemo.java 1081 2008-09-30 19:03:23Z john $";
次の Perl ワンライナー ...
$ perl -nwe 'print "$1\n" if /.*(\$Id:[^\$]+\$).*/' SvnIdDemo.class
... SVN ID 文字列を STDOUT に出力します。
$Id: SvnIdDemo.java 1081 2008-09-30 19:03:23Z john $
定義済みの名前を使用して、各クラスの下部にメソッドを追加できます。あなたが使用したとしましょう:
public String extractChaimGeretzVersionNumber() {
return "$Id$";
}
次に、クラスをロードし、リフレクションを介してマジック メソッドを呼び出してバージョンを取得するプログラムでバージョンを見つけます。
.class ファイルと .jar ファイルをビルドする前にメソッドを .java ファイルに挿入するコードが必要になるか、マジック メソッドがすべてのファイルに既に存在することを確認するビルド ステップが必要になります。見つからない場合はビルドに失敗します。