<modules> <module>child1-module</module> <module>child2-module</module> <module>child3-module</module> </modules
而水平項目佈局的聲明方式(因其父模塊POM文件與子模塊處在不一樣級的目錄中):html
<modules> <module>../child1-module</module> <module>../child2-module</module> <module>../child3-module</module> </modules>
顯然第一種方式要比第二種方式更加簡潔。總的來講,推薦使用分層項目佈局的方式來組織項目的結構。mysql
mvn archetype:generate -DgroupId=org.fanlychie -DartifactId=maven-multiple-modules-sample -Dversion=0.0.1-SNAPSHOT
進入父模塊目錄:react
cd maven-multiple-modules-sample
刪除父模塊的src目錄(父模塊是一個沒有源代碼的項目,所以不須要src目錄):web
rd /s/q src
父模塊項目的打包類型必須爲pom,修改pom.xml的打包類型以下:sql
<packaging>pom</packaging>
建立子模塊項目user-facade:數據庫
mvn archetype:generate -DgroupId=org.fanlychie -DartifactId=user-facade -Dversion=0.0.1-SNAPSHOT
子模塊pom.xml文件中會自動生成其父模塊信息:apache
<parent> <groupId>org.fanlychie</groupId> <artifactId>maven-multiple-modules-sample</artifactId> <version>0.0.1-SNAPSHOT</version> </parent>
建立子模塊項目user-serviceapp
mvn archetype:generate -DgroupId=org.fanlychie -DartifactId=user-service -Dversion=0.0.1-SNAPSHOT
建立子模塊項目blog-web:eclipse
mvn archetype:generate -DgroupId=org.fanlychie -DartifactId=blog-web -Dversion=0.0.1-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp
在父模塊POM文件中使用<modules>聲明其子模塊:webapp
<!-- modules: 聲明子模塊。模塊間的前後順序是沒有要求的,maven不須要開發者考慮模塊間的依賴關係, maven在構建項目時,它會對模塊自動進行拓撲排序並確保在依賴模塊以前構建依賴的模塊項目。 module: 它的值一般是子模塊項目相對於父模塊POM文件的相對路徑的名稱。 --> <modules> <module>user-facade</module> <module>user-service</module> <module>blog-web</module> </modules>
將項目導入IntelliJ IDEA(主流的JAVA IDE開發工具)。菜單:File --> Open...選擇父模塊項目:
<?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>org.fanlychie</groupId> <artifactId>parent-module</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>parent-module</name> <url>http://maven.apache.org</url> <!-- 子模塊的相對路徑(相對父模塊pom.xml的路徑) --> <modules> <module>../user-facade</module> <module>../user-service</module> <module>../blog-web</module> </modules> </project>
子模塊項目pom.xml配置文件中繼承父模塊部分的配置修改成:
<parent> <groupId>org.fanlychie</groupId> <artifactId>parent-module</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 用於指定父模塊POM的相對路徑。它的默認值是"../" --> <relativePath>../parent-module</relativePath> </parent>
子模塊POM繼承父模塊POM,在子模塊POM配置中<relativePath>用於指定其父模塊的POM文件的相對路徑。若是<relativePath>配置的值是一個目錄,則默認尋找該目錄下的/pom.xml文件。即等效於:
<parent> <groupId>org.fanlychie</groupId> <artifactId>parent-module</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 用於指定父模塊POM的相對路徑。它的默認值是"../" --> <relativePath>../parent-module/pom.xml</relativePath> </parent>
將項目導入IntelliJ IDEA。菜單:File --> Open...選擇項目的根目錄:
元素
|
描述
|
groupId
|
項目組ID
|
version
|
項目版本號
|
description
|
項目描述信息
|
url
|
項目的地址
|
inceptionYear
|
項目成立年份
|
organization
|
項目的組織信息
|
licenses
|
項目許可證
|
developers
|
項目開發者信息
|
contributors
|
項目貢獻者信息
|
mailingLists
|
項目的郵件列表
|
scm
|
項目源代碼管理系統信息
|
issueManagement
|
項目缺陷跟蹤管理系統信息
|
properties
|
項目自定義的屬性
|
dependencyManagement
|
項目的依賴管理配置
|
dependencies
|
項目的依賴配置
|
repositories
|
項目的倉庫配置
|
pluginRepositories
|
項目的插件倉庫配置
|
build
|
項目的構建配置
|
profiles
|
項目的環境配置
|
<!-- 多環境構建配置 --> <profiles> <!-- 開發環境配置 --> <profile> <!-- 標識符, 能夠經過 -P[id] 來激活 --> <!-- -Pdev --> <id>dev</id> <!-- 激活條件 --> <activation> <!-- 能夠經過 -D[name]=[value] 來激活 --> <!-- -Denv=dev --> <property> <name>env</name> <value>dev</value> </property> <!-- 默認激活 --> <activeByDefault>true</activeByDefault> </activation> <!-- 自定義的屬性, 能夠經過 ${label} 來引用 --> <!-- ${jdbcUrl} --> <properties> <jdbcUrl>jdbc:mysql://localhost:3306/dev</jdbcUrl> </properties> </profile> <!-- 測試環境配置 --> <profile> <!-- 標識符, 能夠經過 -P[id] 來激活 --> <!-- -Ptest --> <id>test</id> <!-- 激活條件 --> <activation> <!-- 能夠經過 -D[name]=[value] 來激活 --> <!-- -Denv=dev --> <property> <name>env</name> <value>test</value> </property> </activation> <!-- 自定義的屬性, 能夠經過 ${label} 來引用 --> <!-- ${jdbcUrl} --> <properties> <jdbcUrl>jdbc:mysql://localhost:3306/test</jdbcUrl> </properties> </profile> </profiles>
自定義屬性<properties>須要配合<resources>使用才能發揮做用:
<build> <!-- 類路徑資源配置, 最終輸出到軟件包中 --> <resources> <resource> <!-- 資源目錄路徑, 此路徑是相對當前POM文件的位置 --> <directory>src/main/resources</directory> <!-- filtering=true, 可以代入具體的值替換${label}佔位符 --> <filtering>true</filtering> </resource> </resources> </build>
項目配置文件src/main/resources/environment.properties的內容以下:
mysql.jdbc.url = ${jdbcUrl}
打包開發環境的軟件包:
$ mvn clean -Pdev package
或:
$ mvn clean -Denv=dev package
打包測試環境的軟件包:
$ mvn clean -Ptest package
或:
$ mvn clean -Denv=test package
配置的方式
<profile> <!-- 參與構建的模塊 --> <modules>...</modules> <!-- 構件依賴聲明 --> <dependencies>...</dependencies> <!-- 構件依賴管理 --> <dependencyManagement>...</dependencyManagement> <!-- 構件發佈管理 --> <distributionManagement>...</distributionManagement> <!-- 插件倉庫 --> <pluginRepositories>...</pluginRepositories> <!-- 自定義屬性 --> <properties>...</properties> <!-- 生成站點的報告信息 --> <reporting>...</reporting> <!-- 構件倉庫 --> <repositories>...</repositories> <!-- 構建配置 --> <build> <!-- 默認的構建目標, 在命令行中若是直接執行mvn沒有帶生命週期階段, 則默認執行此處配置的階段 --> <defaultGoal>...</defaultGoal> <!-- 類路徑資源 --> <resources>...</resources> <!-- 單元測試的類路徑資源 --> <testResources>...</testResources> <!-- 打包的名稱 --> <finalName>...</finalName> </build> </profile>
激活方式
<profile> <id>dev</id> <activation> <!-- 默認激活 --> <activeByDefault>true</activeByDefault> </activation> </profile>
用戶或全局settings.xml的配置還可使用<activeProfiles>來激活:
<profile> <id>dev</id> </profile> <activeProfiles> <!-- 根據ID標識符來激活 --> <activeProfile>dev</activeProfile> </activeProfiles>
命令行可使用-P[id]或-P [id]或-P [id1,id2]來激活:
<profile> <id>dev</id> </profile> <profile> <id>test</id> </profile>
$ mvn clean -Pdev package
<profile> <activation> <property> <name>env</name> <value>dev</value> </property> </activation> </profile>
$ mvn clean -Denv=dev package