【问题标题】:How to inject Maven profile value into properties file如何将 Maven 配置文件值注入属性文件
【发布时间】:2016-03-21 06:47:22
【问题描述】:

有点卡在这里。我有一个带有 3 个配置文件的 pom。这些配置文件具有不同的版本名称。我想在构建特定配置文件时将该版本名称注入属性文件。

我的个人资料:

<profiles>
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <projectVersion>DEV</projectVersion>
        </properties>
    </profile>

    <profile>
        <id>test</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <projectVersion>1.0.0-RC1</projectVersion>
        </properties>
    </profile>

    <profile>
        <id>prod</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <projectVersion>1.0.0-Final</projectVersion>
        </properties>
    </profile>
</profiles>

filter.properties 看起来像这样:

projectName = defaultName
versionName = defaultVersion

如何做到这一点?我通过命令构建项目:

mvn clean install -D profile_name

【问题讨论】:

  • 注意 -D 不会激活任何配置文件,但 -P 会这样做。此外,三个配置文件默认处于活动状态,这是您想要的吗?
  • 啊,当然是-P(我的错!)。我的最终目标是构建一个简单的 Web 应用程序,它有一个包含应用程序名称和应用程序版本的页面。此网页中的版本名称取决于配置文件版本名称。我的想法是将配置文件版本值设置为属性,然后从属性将其设置为 jsp 页面。

标签: java maven


【解决方案1】:

您需要做的是在 POM 文件的 &lt;build&gt; 部分添加一个新部分。

像这样:

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
            </includes>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

这将在指定文件**/*.properties 上的指定文件夹 (src/main/resources) 内查找,并在遇到定义的变量时更改文件。

因此,为了完成这项工作,您的属性文件必须是这样的:

projectName = ${defaultName}
versionName = ${defaultVersion}

注意这些变量的名称。 Maven 会将其替换为您定义的名称,或者 ${projectVersion} 等 Maven 结构的名称将替换为您的 pom 文件的 &lt;version&gt;1.0&lt;/version&gt; 标记。

所以不要使用:

<properties>
     <projectVersion>1.0.0-Final</projectVersion>
</properties>

将此变量的名称(和版本)更改为其他名称,例如:

<properties>
     <defaultVersion>1.0.0-Final</defaultVersion>
     <defaultName>someName</defaultName>
</properties>

在您的所有个人资料上。

只需运行您的 maven 命令:

mvn install -Pprofilename

【讨论】:

  • 很高兴它起作用了 :) 考虑接受它!如果是您的选择之一。
  • 只是为了防止人们打猎,这在 SB 1.3.0 中进行了更改。这里是 github.com/spring-projects/spring-boot/wiki/... – mdo123
【解决方案2】:

小心您显示的配置文件。默认情况下,它们都处于活动状态,这是一个问题,因为它们都定义了相同的 Maven 属性。相反,您应该只将其中一个标记为默认活动。

您也没有显示&lt;resources&gt; 过滤来处理filter.properties,所以这也可能是一个错误。

最后,您正在控制 Maven 配置文件上的工件版本。我不认为这是一个好主意。请阅读maven-release-plugin

【讨论】:

猜你喜欢
  • 2012-09-07
  • 2017-02-13
  • 2017-06-17
  • 1970-01-01
  • 2016-10-16
  • 2012-03-09
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多