多模組管理
當您的功能繁雜,可能需要把某些功能分割出來,例如我們把程式分割為服務與界面兩個模組,此時必然有部份資料結構是共同的情況下,我們必須把這些共用的部分抽離獨立成為一個單獨的Jar,然後被這兩個模組所共用使用;或是開發EJB程式會同時包含多個程式。
以第一個例子來看,目錄架構可能如下:
MyWeb
├pom.xml
├Datas
│├pom.xml
│└src...
├Service
│├pom.xml
│└src...
└UI
├pom.xml
└src...
而最頂端(MyWeb)的pom.xml負慣管理,共同的組件,例如:引用的Dependencies,Pluings …等等, 大緻如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>MyWeb</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<name>MyWeb模組餐理</name>
<modules>
<module>Datas</module>
<module>Service</module>
<module>UI</module>
</modules>
<properties>
...
</properties>
<dependencyManagement><!--這裡先訂義相依Dependencies的版本,以避免各自模組引用到不用版本
(當然,若因部署環境需要用到不同版本的的Dependencies,那就到子轉案的pom.xml設定) -->
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.22.1</version>
</dependency>
<dependency>
...
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement><!--同樣,plugin也可以共同在此管理版本的設定,當然,也可以留給讓模組自已去訂義-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
<compilerArgs>
</configuration>
</plugin>
<plugin>
...
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Datas pom.xml
<pom>
<modelVersion>4.0.0</modelVersion>
<parent> <!-- 指定父模組 -->
<groupId>com.company</groupId>
<artifactId>MyWeb</artifactId>
<version>1.0</version>
</parent>
<artifactId>Datas</artifactId>
<packaging>jar</packaging>
<name>共用資料結構</name>
<dependencies>
<dependency><!--父模組有設定,我們只需聲明引用就可以了-->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
</dependencies>
</pom>
Service與UI的 pom.xml大概都長得差不多
<pom>
<modelVersion>4.0.0</modelVersion>
<parent> <!-- 指定父模組 -->
<groupId>com.company</groupId>
<artifactId>MyWeb</artifactId>
<version>1.0</version>
</parent>
<artifactId>UI</artifactId>
<packaging>war</packaging>
<name>前端界面</name>
<dependencies>
<dependency><!-- 引用共用資料結構的模組 -->
<groupId>${project.groupId}</groupId>
<artifactId>Datas</artifactId>
<version>${project.version}</version>
</dependency>
<dependency><!--父模組有設定,我們只需聲明引用就可以了-->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
</dependencies>
</pom>
當我們下指令 mvn package
時,每個模組都會依序走完各自的生命週期。