Apache Maven Modules使用

將專案模組化

前言

在專案開發上往往會將一個大型專案進行拆分,一來可以進行模組分類,二來可以重複使用,楊藝進行專案開發也是如此,不過正如楊藝先前整理的「Apache Maven 依賴傳遞」,透過依賴傳遞可以將上層專案以及上層專案的 <dependency> 一併傳入到下層專案內,但如果上層專案有所更動,就得重新建置上層專案,當項目拆分得更細時那就得一路從上層建置到下層,有時也可能把建置順序搞錯,因此可以定義一個彙整這些依賴的專案,透過這專案一併進行專案清理與建置。

實作

建置方式十分簡單,僅需建置一個Apache Maven專案,打包方式設定為pom,再使用<modules>定義好要建置的專案即可。因建置簡單,在此只展示pom.xml檔設定。

Maven 設定檔:pom.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?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>cc.artyang.blog</groupId>
    <artifactId>artyang-batch-build</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <!-- Modules -->
    <modules>
        <module>../artyang-bach-service</module>
        <module>../artyang-batch</module>
    </modules>
</project>

建置結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
> mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] artyang-bach-service                                                  [jar]
[INFO] artyang-batch                                                         [jar]
[INFO] artyang-batch-build                                                   [pom]
[INFO]
[INFO] -------------------< cc.artyang.blog:artyang-bach-service >-------------------
[INFO] Building artyang-bach-service 1.0-SNAPSHOT                            [1/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ artyang-bach-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\artan\Documents\NetBeansProjects\artyang-bach-service\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ artyang-bach-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ artyang-bach-service ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\artan\Documents\NetBeansProjects\artyang-bach-service\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ artyang-bach-service ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ artyang-bach-service ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ artyang-bach-service ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ artyang-bach-service ---
[INFO] Installing C:\Users\artan\Documents\NetBeansProjects\artyang-bach-service\target\artyang-bach-service-1.0-SNAPSHOT.jar to C:\Users\artan\.m2\repository\cc\artyang\blog\artyang-bach-service\1.0-SNAPSHOT\artyang-bach-service-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\artan\Documents\NetBeansProjects\artyang-bach-service\pom.xml to C:\Users\artan\.m2\repository\cc\artyang\blog\artyang-bach-service\1.0-SNAPSHOT\artyang-bach-service-1.0-SNAPSHOT.pom
[INFO]
[INFO] ----------------------< cc.artyang.blog:artyang-batch >-----------------------
[INFO] Building artyang-batch 1.0-SNAPSHOT                                   [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ artyang-batch ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\artan\Documents\NetBeansProjects\artyang-batch\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ artyang-batch ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ artyang-batch ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Users\artan\Documents\NetBeansProjects\artyang-batch\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ artyang-batch ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ artyang-batch ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ artyang-batch ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ artyang-batch ---
[INFO] Installing C:\Users\artan\Documents\NetBeansProjects\artyang-batch\target\artyang-batch-1.0-SNAPSHOT.jar to C:\Users\artan\.m2\repository\cc\artyang\blog\artyang-batch\1.0-SNAPSHOT\artyang-batch-1.0-SNAPSHOT.jar
[INFO] Installing C:\Users\artan\Documents\NetBeansProjects\artyang-batch\pom.xml to C:\Users\artan\.m2\repository\cc\artyang\blog\artyang-batch\1.0-SNAPSHOT\artyang-batch-1.0-SNAPSHOT.pom
[INFO]
[INFO] -------------------< cc.artyang.blog:artyang-batch-build >--------------------
[INFO] Building artyang-batch-build 1.0-SNAPSHOT                             [3/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ artyang-batch-build ---
[INFO] Installing C:\Users\artan\Documents\NetBeansProjects\artyang-batch-build\pom.xml to C:\Users\artan\.m2\repository\cc\artyang\blog\artyang-batch-build\1.0-SNAPSHOT\artyang-batch-build-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for artyang-batch-build 1.0-SNAPSHOT:
[INFO]
[INFO] artyang-bach-service .................................. SUCCESS [  1.044 s]
[INFO] artyang-batch ......................................... SUCCESS [  0.090 s]
[INFO] artyang-batch-build ................................... SUCCESS [  0.022 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.276 s
[INFO] Finished at: 2020-04-18T10:06:13+08:00
[INFO] ------------------------------------------------------------------------