4

C & C++ コンパイル時定数 __DATE__ および __TIME__ に相当する Java はありますか。コンパイル中のプログラムのコンパイル時間とバージョン情報を出力する必要があります。

ありがとう

kodev19

4

3 に答える 3

6

私の知る限り、そのようなものはありません。しかし、実行中の JVM では、以下のコードのようなものを使用して、jar からすぐにいくつかの情報を取得できます (ここでは、情報は、コンパイル時に jar に入れられたマニフェスト ファイルから取得されます (ビルド システムが Ant か Maven のいずれか)。自由に変更してください (別の出力など)。

    public String getVersionfinal Class classe) {
    String version = null;
    String shortClassName = classe.getName().substring(classe.getName().lastIndexOf(".") + 1);
    try {
        ClassLoader cl = this.getClass().getClassLoader();
        String threadContexteClass = classe.getName().replace('.', '/');
        URL url = cl.getResource(threadContexteClass + ".class");
        if ( url == null ) {
            version = shortClassName + " $ (no manifest)";
        } else {
            String path = url.getPath();
            String jarExt = ".jar";
            int index = path.indexOf(jarExt);
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
            if (index != -1) {
                String jarPath = path.substring(0, index + jarExt.length());
                File file = new File(jarPath);
                String jarVersion = file.getName();
                JarFile jarFile = new JarFile(new File(new URI(jarPath)));
                JarEntry entry = jarFile.getJarEntry("META-INF/MANIFEST.MF");
                version = shortClassName + " $ " + jarVersion.substring(0, jarVersion.length()
                        - jarExt.length()) + " $ "
                        + sdf.format(new Date(entry.getTime()));
                CloseHelper.close(jarFile);
            } else {
                File file = new File(path);
                version = shortClassName + " $ " + sdf.format(new Date(file.lastModified()));
            }
        }
    } catch (Exception e) {
        version = shortClassName + " $ " + e.toString();
    }
    return version;
}

一度使用すると、次のような出力が出力されます (ここでは、2008 年 3 月 15 日 20:43 にコンパイルされた commons-lang-2.4.jar で利用可能な StringUtils.class の場合):

StringUtils $ commons-lang-2.4 $ 15/03/2008 20:43:16

于 2009-12-16T21:57:54.373 に答える
3

ここでは、 Ant TStampタスクが役に立ちます。プロパティ ファイルまたはコードに挿入するために、ビルド時にタイムスタンプを作成します。

現在のプロジェクトで DSTAMP、TSTAMP、および TODAY プロパティを設定します。デフォルトでは、DSTAMP プロパティの形式は「yyyyMMdd」、TSTAMP の形式は「hhmm」、TODAY の形式は「MMMM dd yyyy」です。ネストされた要素を使用して、別の形式を指定します。

これらのプロパティは、たとえばビルド ファイルで使用して、タイムスタンプ付きのファイル名を作成したり、ドキュメント内のプレースホルダー タグを置き換えてリリース日などを示すために使用したりできます。このタスクに最適な場所は、おそらく初期化ターゲットです。

私はこれを使用して、ビルド時間と日付、ユーザーとホスト、バージョン番号などを含むプロパティ ファイルを作成する傾向があります。次に、アプリケーションがそのプロパティ ファイルを読み取り、関連情報をログに記録します (通常、私は人々がこの情報をいじるのを心配します)。

于 2009-12-16T21:19:31.400 に答える
2

コードに直接ではありませんが、Ant を使用してこれを行うことができます。

このページの「ウォンバット」の例を参照してください。

于 2009-12-16T21:04:36.503 に答える