マルチプロジェクトとは?

マルチプロジェクトの作成

  1. 親プロジェクトの作成
    [~/java]$ mvn archetype:generate -DartifactId=multi-prj -DgroupId=com.snail.exam
    [追記] archetype:create は、Maven 3.0.5 で廃止。代わりに generate を使う
  2. 親プロジェクトの pom.xml の編集
    [~/java]$ cd multi-prj
    [~/java/multi-prj]$ vi pom.xml
    <packaging> を jar から pom に変更して、マルチプロジェクトの親プロジェクトであることを宣言する
    <?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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.snail.exam</groupId>
      <artifactId>multi-prj</artifactId>
      <packaging>pom</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>multi-prj</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    
  3. 子プロジェクトの作成
    [~/java/multi-prj]$ mvn archetype:generate -DartifactId=mulpro-jar -DgroupId=com.snail.exam
    [~/java/multi-prj]$ mvn archetype:generate -DartifactId=mulpro-web
    -DgroupId=com.snail.exam -DarchetypeArtifactId=maven-archetype-webapp
    [追記] archetype:create は、Maven 3.0.5 で廃止。代わりに generate を使う
  4. Jar プロジェクトと Web プロジェクトの関連づけ
    [~/java/multi-prj]$ cd mulpro-web
    [~/java/multi-prj/mulpro-web]$ vi pom.xml
    mulpro-jar を <dependency> に追加する
    <?xml version="1.0" encoding="UTF-8"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
      xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <artifactId>multi-prj</artifactId>
        <groupId>com.snail.exam</groupId>
        <version>1.0-SNAPSHOT</version>
      </parent>
      <groupId>com.snail.exam</groupId>
      <artifactId>mulpro-web</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
      <name>mulpro-web Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <build>
        <finalName>mulpro-web</finalName>
      </build>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.snail.exam</groupId>
          <artifactId>mulpro-jar</artifactId>
          <version>1.0-SNAPSHOT</version>
        </dependency>
      </dependencies>
    </project>
    

で、どういうモノができたのか?

[~/java/multi-prj]$ tree
.
|-- mulpro-jar
|   |-- pom.xml
|   |-- src
|   |   |-- main
|   |   |   `-- java
|   |   |       `-- com
|   |   |           `-- snail
|   |   |               `-- exam
|   |   |                   `-- App.java
|   |   `-- test
|   |       `-- java
|   |           `-- com
|   |               `-- snail
|   |                   `-- exam
|   |                       `-- AppTest.java
|   `-- target
|       |-- classes
|       |   `-- com
|       |       `-- snail
|       |           `-- exam
|       |               `-- App.class
|       |-- maven-archiver
|       |   `-- pom.properties
|       |-- mulpro-jar-1.0-SNAPSHOT.jar
|       |-- surefire-reports
|       |   |-- TEST-com.snail.exam.AppTest.xml
|       |   `-- com.snail.exam.AppTest.txt
|       `-- test-classes
|           `-- com
|               `-- snail
|                   `-- exam
|                       `-- AppTest.class
|-- mulpro-web
|   |-- pom.xml
|   |-- src
|   |   `-- main
|   |       |-- resources
|   |       `-- webapp
|   |           |-- WEB-INF
|   |           |   `-- web.xml
|   |           `-- index.jsp
|   `-- target
|       |-- classes
|       |-- maven-archiver
|       |   `-- pom.properties
|       |-- mulpro-web
|       |   |-- META-INF
|       |   |-- WEB-INF
|       |   |   |-- classes
|       |   |   `-- web.xml
|       |   `-- index.jsp
|       |-- mulpro-web.war
|       `-- war
|           `-- work
|               `-- webapp-cache.xml
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- snail
    |               `-- exam
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- snail
                    `-- exam
                        `-- AppTest.java

49 directories, 20 files
[~/java/multi-prj]$ 

親プロジェクトの pom.xml

<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.snail.exam</groupId>
  <artifactId>multi-prj</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>multi-prj</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <modules>
    <module>mulpro-jar</module>
    <module>mulpro-web</module>
  </modules>
</project>

子 Web プロジェクトの pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
  xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>multi-prj</artifactId>
    <groupId>com.snail.exam</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>com.snail.exam</groupId>
  <artifactId>mulpro-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>mulpro-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <build>
    <finalName>mulpro-web</finalName>
  </build>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.snail.exam</groupId>
      <artifactId>mulpro-jar</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

子 Jar プロジェクトの pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>multi-prj</artifactId>
    <groupId>com.snail.exam</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <groupId>com.snail.exam</groupId>
  <artifactId>mulpro-jar</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>mulpro-jar</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Eclipseへのインポート

マルチプロジェクトを Eclipse にインポートする

依存ライブラリの定義

eclipse_package2.png

ビルドとテスト

mvn コマンドではもちろんビルドは上手くいく

m2eclipse 付属の 組み込み版 Maven 2 ではマルチプロジェクトをビルドできない

m2eclipse のビルドエンジンを 通常の Maven 2 に変更する

[追記] 親プロジェクトからまとめて mvn cobertura:cobertura する場合の工夫



Java Maven


添付ファイル: filem2eclipse_build.png 862件 [詳細] filem2eclipse_engine.png 847件 [詳細] fileeclipse_package2.png 740件 [詳細] fileeclipse_package.png 733件 [詳細] filemulpro_import.png 785件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2016-07-10 (日) 22:53:35 (148d)
ISBN10
ISBN13
9784061426061