如何将Maven配置文件值注入属性文件

G.S*_*sky 6 java maven

有点卡在这里.我有一个有3个配置文件的pom.Theese个人资料有不同的版本名称.我想在构建特定的配置文件时将该版本名称注入属性文件中.

我的档案:

<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>
Run Code Online (Sandbox Code Playgroud)

和filter.properties看起来像这样:

projectName = defaultName
versionName = defaultVersion
Run Code Online (Sandbox Code Playgroud)

怎么做?我按命令建立项目:

mvn clean install -D profile_name
Run Code Online (Sandbox Code Playgroud)

Jor*_*pos 7

您需要做的是<build>在POM文件的部分添加一个新部分.

像这样:

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <includes>
                <include>**/*.properties</include>
            </includes>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>
Run Code Online (Sandbox Code Playgroud)

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

所以为了这项工作,你的属性文件必须是这样的:

projectName = ${defaultName}
versionName = ${defaultVersion}
Run Code Online (Sandbox Code Playgroud)

请注意这些变量的名称.Maven将使用您定义的名称替换它,或者像$ {projectVersion}的Maven结构的名称将替换<version>1.0</version>为您的pom文件的标记.

所以不要使用:

<properties>
     <projectVersion>1.0.0-Final</projectVersion>
</properties>
Run Code Online (Sandbox Code Playgroud)

将此变量的名称(和版本)更改为其他内容:

<properties>
     <defaultVersion>1.0.0-Final</defaultVersion>
     <defaultName>someName</defaultName>
</properties>
Run Code Online (Sandbox Code Playgroud)

在您的所有配置文件

并运行您的maven命令:

mvn install -Pprofilename
Run Code Online (Sandbox Code Playgroud)

  • 很高兴它有效:)考虑接受它!如果是你的选择之一. (2认同)

mal*_*una 5

请注意您显示的配置文件.默认情况下它们都是活动的,这是一个问题,因为它们都定义了相同的maven属性.相反,您应该默认只将一个标记为活动.

您也不会显示<resources>要处理的过滤filter.properties,因此这也是一个错误.

最后,你可以在maven配置文件中控制工件版本.我不认为这是个好主意.请阅读maven-release-plugin.