2

JSF でレガシー アプリを書き直そうとしていますが、書き直された他のアプリでは、maven バージョンがフッターに投稿されています。

私は彼らがどのようにそれを行っているかを理解しようとしていますが、これまでのところ、彼らが行っていることがわかりました:

footer.xhtml

<h:outputText id="fullBuildString" value="#{ApplicationInfo.fullBuildString}" />

ApplicationInfoBacking.java

public class ApplicationInfoBacking {

    private String             buildTime;
    private String             iteration;
    private String             version;
    private String             inception;
    private String             fullBuildString;

    @PostConstruct
    public void init() {
        fullBuildString = generateFullBuildString();
    }

    public String getBuildTime() {
        return buildTime;
    }

    public void setBuildTime(final String buildTime) {
        this.buildTime = buildTime;
    }

    public String getIteration() {
        return iteration;
    }

    public void setIteration(final String iteration) {
        this.iteration = iteration;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(final String version) {
        this.version = version;
    }

    public String getInception() {
        return inception;
    }

    public void setInception(final String inception) {
        this.inception = inception;
    }

    /**
     * @return ApplicationName vVersion (Iteration) BuildTime
     */
    public String getFullBuildString() {
        return fullBuildString;
    }

    public String generateFullBuildString() {

        if ((version == null) || "".equals(version.trim())) {
            version = "Unknown version";
        }

        if ((iteration == null) || "".equals(iteration.trim())) {
            iteration = "Unknown iteration";
        }

        if ((buildTime == null) || "".equals(buildTime.trim())) {
            buildTime = "Unknown build time";
        }

        final StringBuilder build = new StringBuilder();
        build.append("v. ").append(version);

        if (!Phase.PRODUCTION.equals(PlatformUtil.getPhase()) && !Phase.BETA.equals(PlatformUtil.getPhase())) {
            build.append(" (").append(iteration).append(")");
            build.append(" ").append(buildTime);
        }

        return build.toString();
        }
}

顔-config.xml

<managed-bean>
        <managed-bean-name>ApplicationInfo</managed-bean-name>
        <managed-bean-class>path.to.class.ApplicationInfoBacking</managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>buildTime</property-name>
            <value>#{initParam.buildTime}</value>
        </managed-property>
        <managed-property>
            <property-name>iteration</property-name>
            <value>#{initParam.iteration}</value>
        </managed-property>
        <managed-property>
            <property-name>version</property-name>
            <value>#{initParam.version}</value>
        </managed-property>
        <managed-property>
            <property-name>inception</property-name>
            <value>#{initParam.inception}</value>
        </managed-property>
    </managed-bean>

web.xml

<context-param>
        <param-name>buildTime</param-name>
        <param-value>${buildNumber}</param-value>
    </context-param>
    <context-param>
        <param-name>iteration</param-name>
        <param-value>${iteration}</param-value>
    </context-param>
    <context-param>
        <param-name>version</param-name>
        <param-value>${pom.version}</param-value>
    </context-param>

これは、アプリをロードしたときに実際に表示されるものです:

v. ${pom.version}

何らかの理由で${pom.version}が解釈されていません。

誰かが理由を知っていますか?

4

3 に答える 3

2

彼らはbuildnumberプラグインを使用しているようです:http://mojo.codehaus.org/buildnumber-maven-plugin/

これをweb-moduleに追加してから、pom.xmlのresourcesセクションからweb.xmlのフィルタリングを有効にする必要があります。faces-configを変更する必要はないと思います。initParamを使用できることを知りませんでした。できない場合でも、IDEがweb.xmlのフィルタリングを好まない場合に備えて、faces-configを直接フィルタリングできます。

「pom.version」は非推奨であるため機能しない可能性がありますか?project.versionを使用してみてください

于 2013-02-15T13:00:03.937 に答える
1

pom.version は解釈されません。実行時に pom のようなものがないためです。pom.xml は、Maven が pom を読み取ってモデルを作成する場合にのみ、ビルド時にプロジェクト セットアップの Java オブジェクト ツリーとしてメモリ内に存在します。実行時に Maven は実行されていないため、 pom.version には値がありません。また、pom.* は非推奨です.. project.* にする必要があります。

あなたが望むことをするために、他の答えで提案された解決策を使用してください..

于 2013-02-14T22:43:02.270 に答える
1

別のプロパティファイルからのmaven pomキーを持っています

アプリの起動時にプロパティ ファイルを読み取り、それをアプリケーション スコープの Bean に配置する

于 2013-02-14T21:20:19.150 に答える