3

私のプロジェクトには 2 つのバージョンがあります。

  1. プロジェクトがパッケージ化されたときに使用される私のPOM.xmlのバージョンなど。
  2. コードに定数を入れたバージョンなので、実行時にログに記録するときに使用できます。

これらはもちろん同じはずですが、ときどきどちらかを変更するのを忘れてしまいます。

このバージョンを一度だけ定義し、実行時に Maven とコードの両方で使用する良い方法はありますか?

4

3 に答える 3

4

http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html

これを見てください。バージョン番号を参照する特定のプロパティを持つプロパティ ファイルが必要です。また、フィルタリングを使用すると、maven アーティファクトとアプリケーションの両方で同じバージョンを設定できます。

于 2013-04-15T11:21:27.257 に答える
2

Maven を使用してアプリケーションをパッケージ化すると、Maven は directory を生成しMETA-INF/maven/<groupId>/<artifactId>/pom.propertiesます。そのファイルには、POM に従ってプロジェクトのバージョンが含まれており、バージョン番号を読み取るために、実行時に JAR ファイルからそのファイルをロードできます。

唯一のことは、このファイルはパッケージ化されたプロジェクト (JAR、WAR、または EAR) にのみ存在するということです。ワークベンチからコードを実行するときのフォールバック メカニズムを書きたいと思うかもしれません。

于 2013-04-15T11:22:08.870 に答える
1

これは、pom ファイルで指定されたバージョンが必要な場合に通常使用するコードです。

private final static String GROUP_ID = "my.group";
private final static String ARTIFACT_ID = "my-artifact";

private String getVersion() {
    String propFileName = "META-INF/maven/" + GROUP_ID + "/" + ARTIFACT_ID + "/pom.properties";
    Properties properties = new Properties();
    String version = "n/a";

    try {
        InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(propFileName);

        if (inStream != null) {
            properties.load(inStream);
            version = properties.getProperty("version", "n/a");
        }
    } catch (IOException e) { }
    return version;
}

mthmulders が彼の回答で述べているように、このファイルはパッケージ化されたプロジェクトにのみ存在します(作業ディレクトリではなく、最終的な war/jar/any にあります)。

于 2013-04-15T11:30:15.710 に答える