9

次の pom.xml があります。

<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>mycompany</groupId>
    <artifactId>resource-fail</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <foo.bar>BazBat</foo.bar>
    </properties>
    <build>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
    <profiles>
        <profile>
            <id>Development</id>
            <!--
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            -->
            <properties>
                <foo.bar>Development</foo.bar>
            </properties>
        </profile>
    </profiles>
</project>

activationの要素profileがコメントアウトされていることに注意してください

私はまた、以下を持っていますsrc/main/java/application.properties

myproperty=${foo.bar}

したがって、Maven が行うことを期待しているのは、開発プロファイルがアクティブ化されていない限り、単純に に${foo.bar}置き換えることです。BazBat${foo.bar}Development

実行するmvn packageと、値が に設定されBazBatます。よし、リソース フィルタリングは期待どおりに機能している。

ただし、実行するmvn package -P Developmentと値が設定されますBazBat

さらに混乱させるためactivationに、プロファイルの要素のコメントを外して実行mvn packageすると、次のように設定さ${foo.bar}れますDevelopment

アクティブなプロファイル名を出力するように実行しましたが、上記の両方のシナリオで開発プロファイルがアクティブであると表示されていますが、フラグが設定されmvn help:active-profiles packageていないとフィルタリングは機能しません。activeByDefault

総括する:

  • プロファイルがactiveByDefault
  • コマンドラインスイッチを介してプロファイルをアクティブ化すると、Maven はプロパティをオーバーライドしませ

何が起こっている?

私の環境:

> mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T11:29:23-06:00)
Maven home: C:\apache-maven-3.2.5
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_65\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

更新: 最新の Maven (3.3.3) にアップグレードしましたが、問題は解決しません。私の新しい環境:

> mvn -version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T06:57:37-05:00)
Maven home: C:\apache-maven-3.3.3
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_65\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
4

2 に答える 2

-3

実行時に -P と development の間のスペースを削除する必要があります: mvn package -PDevelopment

于 2016-01-07T15:07:13.923 に答える