首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在我的应用程序中显示pom.xml版本?

如何在我的应用程序中显示pom.xml版本?
EN

Stack Overflow用户
提问于 2013-02-15 05:07:50
回答 3查看 2.9K关注 0票数 2

我正在尝试用JSF重写一个遗留的应用程序,其他已经重写的应用程序在页脚中发布了maven版本。

我正在试图弄清楚他们是如何做到这一点的,到目前为止,我已经弄清楚了他们正在做的事情:

footer.xhtml

代码语言:javascript
运行
复制
<h:outputText id="fullBuildString" value="#{ApplicationInfo.fullBuildString}" />

ApplicationInfoBacking.java

代码语言:javascript
运行
复制
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();
        }
}

faces-config.xml

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
<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>

这是我加载应用程序时实际显示的内容:

代码语言:javascript
运行
复制
v. ${pom.version}

由于某些原因,${pom.version}不能被解释。

有人知道为什么吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-15 21:00:04

看起来他们使用的是buildnumber插件:http://mojo.codehaus.org/buildnumber-maven-plugin/

您需要将其添加到您的web模块中,然后通过pom.xml中的资源部分启用对web.xml的过滤-我认为faces-config不需要更改。我不知道你可以用initParam。如果不能,您仍然可以直接过滤faces-config,以防您的集成开发环境不喜欢过滤web.xml

"pom.version“可能无法正常工作,因为它已被弃用?尝试使用project.version

票数 2
EN

Stack Overflow用户

发布于 2013-02-15 05:20:19

让maven pom密钥来自不同的属性文件。

在应用程序启动时读取属性文件,并将其放入应用程序范围的bean中

票数 1
EN

Stack Overflow用户

发布于 2013-02-15 06:43:02

pom.version不会被解释,因为在运行时没有pom这样的东西。只有当pom.xml读取pom并创建模型时,它才会在构建时作为项目设置的Java对象树存储在内存中。在运行时,Maven没有运行,因此pom.version没有值。也不推荐使用pom.*。它应该是项目。*

为了做你想做的事情,使用另一个答案中提出的解决方案..

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14884059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档