javaのclassファイルにバージョン情報を埋め込みたい


windowsのdllファイルとかだと右クリックプロパティからバージョン番号を見れるものがありますが  
あんな感じの情報をjavaのclassファイルに埋め込みたいです。  
windowsとeclipseで開発してますがそのようなことは可能でしょうか。  
可能ならやり方を教えてください。  
よろしくお願いします。




javapコマンドでclassファイルを逆アセンブルする方法もあります．  
windowsで動作確認していませんが，Linuxでは以下のように  
コンパイル前のファイル名，クラス名，コンストラクタ，フィールド名，メソッド名が  
が確認できます．

[code]

    $ javap Hello.class
    Compiled from "Hello.java"
    class Hello {
      public static final java.lang.String VERSION;
      Hello();
      public void sayHello();
    }
    
[/code]

-vオプションを付けるとより詳細に表示されます．
[code]

    $ javap -v Hello.class
    ...
      public static final java.lang.String VERSION;
        descriptor: Ljava/lang/String;
        flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL
        ConstantValue: String 1.0.0
    ...
    
[/code]

このように，定義した変数の値も確認できるので  
(ここでは VERSION = "1.0.0" とした)  
コンパイル前にjavaファイルにバージョン情報を埋め込むことで  
javapコマンド経由で確認することもできます．




`.dll`ファイルに相当するのは`.class`でなく`.jar`ファイルになるかと思います。

JARファイルの仕様では`META-
INF/MANIFEST.MF`ファイルに、[実装バージョン](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90468)を記述する[`Implementation-
Version`セクション](https://docs.oracle.com/javase/jp/8/docs/technotes/guides/jar/jar.html#Main_Attributes)があります。  
これが[DLLのバージョン情報](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9_\(Windows\)#%E7%A8%AE%E9%A1%9E)に近いものかと考えます。

JARファイルへのマニフェストファイル追加は[`jar`コマンド](https://docs.oracle.com/javase/jp/7/technotes/tools/windows/jar.html)の`m`オプションで行えます。

あるいは、 `maven-jar-plugin`
を利用するのであれば、[`addDefaultImplementationEntries`を`true`に設定](https://maven.apache.org/shared/maven-
archiver/examples/manifest.html)することでプロジェクトのバージョンを自動で`Specification-
Vendor`に設定することも出来ます。

* * *

ただし、Javaプログラマに「何によってJARファイルのバージョン識別を行うか」という質問をしたとき、回答で最も多いのは(上記のような`MANIFEST.MF`のエントリによってではなく)
**JARファイルのファイル名によって** 識別する、だろうと思われます。

Javaではバージョン管理対象となるようなJARファイルの生成には[Maven](https://maven.apache.org/)を使用するのが一般的で、これを利用してJARファイルを生成した場合、デフォルトでファイル名にバージョン番号が付与されます。

例えば[こちら](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22)ではJUnitのバージョンごとのファイルがダウンロードできますが("Download"の"jar"リンク)、バージョン`4.12`であれば`junit-4.12.jar`,
バージョン`3.8.1`であれば`junit-3.8.1.jar`という名前になっているのが確認できるかと思います。

Maven形式のプロジェクトは、Eclipseなど一般的なJava用IDEで取り扱うことができます。

