web-dev-qa-db-ja.com

Maven-外部プロパティファイルからプロパティを読み取る

次のようなプロパティファイルがあります

junit.version=3.8.1
dbcp.version=5.5.27
Oracle.jdbc.version=10.2.0.2.0

以下に示すように、pomファイルからこれらのプロパティを読み取ろうとします

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>${junit.version}</version>
  <scope>test</scope>
</dependency>


<dependency>
    <groupId>dbcp</groupId>
    <artifactId>dbcp</artifactId>
    <version>${dbcp.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
  <groupId>com.Oracle</groupId>
  <artifactId>ojdbc14</artifactId>
  <version>${Oracle.jdbc.version}</version>
  <scope>provided</scope>
</dependency>

およびプラグイン構成

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <executions>
           <!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. -->
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>../live.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>

Mvn clean installを実行すると、プロパティが見つからず、代わりに次のエラーが発生することがわかりました。

'dependencies.dependency.version' for junit:junit:jar must be a valid version but is '${junit.version}'. @ line 23, column 16
'dependencies.dependency.version' for dbcp:dbcp:jar must be a valid version but is '${dbcp.version}'. @ line 31, column 12
'dependencies.dependency.version' for com.Oracle:ojdbc14:jar must be a valid version but is '${Oracle.jdbc.version}'. @ line 37, column 13

上記の失敗は、依存関係を宣言するときにプロパティを参照する状況にあるようです。他のいくつかの状況では、プロパティがファイルから読み取られることがわかりました。たとえば、プロジェクトバージョンタグ(依存関係バージョンではない)のプロパティを使用すると機能します

依存関係宣言から参照されている場合、プロパティはファイルから読み取られないようですが、他の場所から参照されている場合は読み取られます。何か案は?

17
ziggy

initializeフェーズは クリーンライフサイクル の一部ではありません。また、プロパティプラグインをpre-cleanフェーズにバインドする必要があります。

ただし、依存関係の解決は他のプラグインを解決して実行する前に実行されるため、アプローチは機能しません。

これに対処する適切な方法は、依存関係のバージョンを親pom.xmlに移動し、両方のプロジェクトで同じ親pomを使用することです。

13
Eugene Kuleshov

uは次のように定義できます:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-2</version>
            <executions>
                <execution>
                <id>pre-clean-config</id>
                    <phase>pre-clean</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>config.properties</file>
                        </files>
                    </configuration>
                </execution>
                <execution>
                <id>initialize-config</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>config.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
2
user1186784