2012-06-21 9 views
33

状況は、私は同じ構造を持つ2つのMavenマルチモジュールプロジェクトを持って、次のとおりです。私はプロジェクト1を構築するとMavenマルチモジュールプロジェクトのビルドオーダー?

 
Parent 
    - Module 1 
    - Module 2 

、私は(順序はparent-> module1->モジュール2である)親が最初に構築されていることを確認します。しかし、プロジェクト2の場合、親は最後に構築されます(注文はmodule1-> module2-> parent)。 2つのプロジェクトのビルドオーダーが異なるのはなぜですか?さらに、ビルドオーダーを手動で制御するにはどうすればよいですか?

アップデート1:
どちらの親プロジェクトは、ソースコードなしで簡単なPOMプロジェクトですので、私は依存関係グラフごとにビルド順序を説明することはできません。

アップデート2:
親のPOMは、GAVと子モジュール名を除いて同一である:ビルド順序が自動的に正しいビルドを確実にする機構であるMavenのリアクターによって決定される

 
<?xml version="1.0" encoding="UTF-8"?> 
<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>parent-group-id</groupId> 
    <artifactId>parent-artifact-id</artifactId> 
    <version>parent-version</version> 
    <packaging>pom</packaging> 
    <name>parent-name</name> 
    <modules> 
     <module>module-1</module> 
     <module>module-2</module> 
    </modules> 
</project> 
+0

[Mavenのマルチプロジェクトのビルドオーダー]の可能な複製(http://stackoverflow.com/questions/6593503/impose-build-order-for-a-multi-project-in-maven) – nullpointer

答えて

24

プロジェクトをソートしてマルチモジュールビルドを注文する。

どのように動作するかについてはthe official documentationを参照してください。

それは言う:

次の関係が表彰されたプロジェクトをソートする場合:

  • ビルド
  • プラグインは内の別のモジュールであるプラグインの宣言で他のモジュール上のプロジェクトの依存関係ビルド
  • ビルド中の別のモジュールへのプラグインの依存性
  • build extens (他のルールが適用されない場合)、別のモジュール上のイオン宣言ビルド
  • 順序は

要素で宣言され、手動でビルド順序を制御することはできません。順序を変更したい場合は、原子炉のソート順に影響するプロジェクトを変更する必要があります。

+0

しかし、これは2つのプロジェクトが異なるビルドオーダーを持つ理由を説明していません。 –

+1

お金を分けていただけますか? –

+0

更新2をご覧ください。 –

9

ビルドオーダーは、モジュール依存グラフのtopological sortに基づいています。

編集:あなたのための質問。プロジェクト1には2つのモジュールがあり、プロジェクト2も含まれていることを理解していますが、プロジェクト2のモジュールは親として「親」ポームを明示していますか?私はおそらくあなたのプロジェクト1モジュールが明示的に親pomを宣言し、プロジェクト2モジュールはそうではないと考えています。これは、プロジェクト2の「親」は実際には親ではないため、モジュールの前に構築する必要はないということです。とにかくそれは私の推測です。

+0

しかし、両方の親プロジェクトはソースコードのない単純なPOMプロジェクトです。依存グラフはここで意味をなさない。 –

関連する問題