2

私は次のMavenプロジェクト構造を持っています:

xyz
  |
  -props
  |  |
  |  - root.properties
  |
  -module_a
  |  |
  |  -pom.xml
  |
  -pom.xml

私のルートアーティファクトは子モジュール(module_a)を定義しており、これは親アーティファクトを参照しています。ルートpom.xmlで、 org.codehaus.mojo:properties-maven-plugin:1.0-alpha-2プラグインを使用して、共通のpropsフォルダーからプロパティファイルを読み取っています 。

mvn clean packageコマンドを発行すると 、次のプットプットが表示されます。

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] my_artifact
[INFO] module_a
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my_artifact 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ my_artifact ---
[INFO]
[INFO] --- properties-maven-plugin:1.0-alpha-2:read-project-properties (default) @ my_artifact ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module_a 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ module_a ---
[INFO]
[INFO] --- properties-maven-plugin:1.0-alpha-2:read-project-properties (default) @ module_a ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] my_artifact ....................................... SUCCESS [0.234s]
[INFO] module_a .......................................... FAILURE [0.000s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.344s
[INFO] Finished at: Thu Aug 09 15:37:46 CEST 2012
[INFO] Final Memory: 2M/5M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:properties-maven-plugin:1.0-alpha-2:read-project-properties (default) on project module_a: Properties file not found: G:\java\xyz\module_a\props\root.properties -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :module_a

子モジュールで、Mavenは存在しないサブフォルダーからプロパティファイルを読み取ろうとします。誰かが私がこれを解決するのを手伝ってくれる?ありがとうございました

4

2 に答える 2

2

maven が pom ファイルを評価し、有効な pom (継承で集約) を作成すると、一部のプロパティが継承から除外されます。これらは project.* で始まるものであり、したがって project.basedir も含まれます。そのため、プロパティ ファイルが親で読み込まれている場所からプロパティを定義することはできません。

この動作の理由は分離です。すべてのモジュールは、maven リポジトリ以外のすべてから分離する必要があります。settings.xml プロファイルを使用しても、この不変条件に違反し、ビルドの移植性が失われます。

多くの場合、この不変式は必要ないため、多数のモジュールがあり、1 つのプロパティ ファイルを使用する場合は、次のようにします。

  • ${project.basedir}/src/main/filters へのルート pom の "filters.dir" などのプロパティを定義します。
  • ${filters.dir}/my.properties からプロパティ ファイルをロードするようにプラグインを構成する
  • どのサブモジュールでも、filters.dir を ../src/main/filters に上書きできるようになりました
  • 多くのサブモジュールがある場合、ルートのfilters.dirに間違ったパス「../src/main/filters」を定義でき、サブモジュールでプロパティを定義する必要はありません。ビルドが失敗しないようにするには、失敗を無視するようにプラグインを設定する必要があります。

別の方法として、AbstractMavenLifecycleParticipant を拡張して Maven 拡張機能を作成し、maven API を使用してそこにプロパティ ファイルをロードして、プロジェクトのルート ディレクトリを特定することもできます。

于 2012-11-08T16:32:39.123 に答える