隨筆-126  評(píng)論-247  文章-5  trackbacks-0

          項(xiàng)目結(jié)構(gòu)

          proj
            |
            |— proj-model
            |      |
            |      |— src
            |      |— pom (jar)
            |      |
            |
            |— proj-dao
            |      |
            |      |— src
            |      |— pom (jar)
            |      |
            |
            |— proj-service
            |      |
            |      |— src
            |      |— pom (jar)
            |      |
            |
            |— proj-web
            |      |
            |      |— src
            |      |— pom (war)
            |      |
            |
            |— pom.xml (pom)
            |

          這里的 proj 項(xiàng)目分了 4 個(gè)模塊,它們分別是:proj-model(數(shù)據(jù)模型層)、proj-dao(數(shù)據(jù)庫訪問層)、proj-service(業(yè)務(wù)邏輯層)、
          proj-web(頁面表現(xiàn)層)。下面我們來依次的來創(chuàng)建這幾個(gè)項(xiàng)目(確保你的 maven 環(huán)境已經(jīng)配置好,以下是 window 環(huán)境的 cmd 終端操作) 。

          創(chuàng)建模塊項(xiàng)目

          01.創(chuàng)建 proj 項(xiàng)目
          mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj
           
          02.創(chuàng)建 proj-model 項(xiàng)目
          mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-model
           
          03.創(chuàng)建 proj-dao 項(xiàng)目
          mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-dao
           
          04.創(chuàng)建 proj-service 項(xiàng)目
          mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-service
           
          05.創(chuàng)建 proj-web 項(xiàng)目
          mvn archetype:create -DgroupId=org.fanlychie -DartifactId=proj-web -DarchetypeArtifactId=maven-archetype-webapp
           
          06.將 proj-model、proj-dao、proj-service、proj-web 移動(dòng)到 proj 目錄里
          for /r /d %i in (proj-*) do move %i proj
           
          07.刪除 proj/src 文件夾(proj 作為父模塊,不需要 src)
          rd /S /Q proj\src
           
          08.為 proj-web 創(chuàng)建 src/main/java 目錄
          mkdir proj\proj-web\src\main\java
           
          09.為 proj-web 創(chuàng)建 src/test/java 目錄
          mkdir proj\proj-web\src\test\java
           
          10.刪除 proj-model、proj-dao、proj-service、proj-web 項(xiàng)目 src/main/java 的源文件(忽略錯(cuò)誤)
          for /r /d %i in (proj\proj-*) do rd /S /Q %i\src\main\java\org
           
          11.刪除 proj-model、proj-dao、proj-service、proj-web 項(xiàng)目 src/test/java 的源文件(忽略錯(cuò)誤)
          for /r /d %i in (proj\proj-*) do rd /S /Q %i\src\test\java\org

          父模塊 proj/pom.xml 配置

          作為父模塊,packaging 類型必須是 pom
          <groupId>org.fanlychie</groupId>
          <artifactId>proj</artifactId>
          <version>1.0-SNAPSHOT</version>
          <packaging>pom</packaging>
          聲明子模塊
          <modules>
            <module>proj-model</module>
            <module>proj-dao</module>
            <module>proj-service</module>
            <module>proj-web</module>
          </modules>
          在父模塊中可以通過 dependencyManagement 對(duì)依賴的包進(jìn)行統(tǒng)一的管理
          <properties>
            <spring.version>4.1.5.RELEASE</spring.version>
          </properties>
          <dependencyManagement>
            <dependencies>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-dao</artifactId>
                <version>${project.version}</version>
              </dependency>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-model</artifactId>
                <version>${project.version}</version>
              </dependency>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-service</artifactId>
                <version>${project.version}</version>
              </dependency>
              <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
              </dependency>
              <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
              </dependency>
            </dependencies>
          </dependencyManagement>
          配置完成之后,父模塊以及父模塊的子模塊不會(huì)引入任何的構(gòu)件依賴,這只是為了讓子模塊能夠繼承得到這些配置,這樣做的好處是,在子模塊中只
          需要聲明 groupId 和 artifactId 不需要聲明 version 就能準(zhǔn)確的獲取得到依賴的構(gòu)件。這樣一來,不僅能夠使子模塊的依賴配置變得簡(jiǎn)單,
          還能使項(xiàng)目范圍內(nèi)所有依賴的構(gòu)件的版本能夠得到統(tǒng)一,它們可以在父模塊中統(tǒng)一的來管理,這樣可以避免模塊之間由于版本不一致而引發(fā)的異常。
          你還可以在父模塊中通過 pluginManagement 來對(duì)依賴的插件進(jìn)行統(tǒng)一的管理
          <build>
            <pluginManagement>
              <plugins>
                <plugin>
                  <groupId>org.eclipse.jetty</groupId>
                  <artifactId>jetty-maven-plugin</artifactId>
                  <version>9.2.8.v20150217</version>
                </plugin>
              </plugins>
            </pluginManagement>
          </build>
          proj/pom.xml 完整的配置:
          <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>proj</artifactId>
            <version>1.0-SNAPSHOT</version>
            <packaging>pom</packaging>
            <name>proj</name>
            <url>http://maven.apache.org</url>
            <properties>
              <spring.version>4.1.5.RELEASE</spring.version>
            </properties>
            <modules>
              <module>proj-model</module>
              <module>proj-dao</module>
              <module>proj-service</module>
              <module>proj-web</module>
            </modules>
            <dependencyManagement>
              <dependencies>
                <dependency>
                  <groupId>org.fanlychie</groupId>
                  <artifactId>proj-dao</artifactId>
                  <version>${project.version}</version>
                </dependency>
                <dependency>
                  <groupId>org.fanlychie</groupId>
                  <artifactId>proj-model</artifactId>
                  <version>${project.version}</version>
                </dependency>
                <dependency>
                  <groupId>org.fanlychie</groupId>
                  <artifactId>proj-service</artifactId>
                  <version>${project.version}</version>
                </dependency>
                <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-context</artifactId>
                  <version>${spring.version}</version>
                </dependency>
                <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-webmvc</artifactId>
                  <version>${spring.version}</version>
                </dependency>
              </dependencies>
            </dependencyManagement>
            <build>
              <pluginManagement>
                <plugins>
                  <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.2.8.v20150217</version>
                  </plugin>
                </plugins>
              </pluginManagement>
            </build>
          </project>

          子模塊 proj-model/pom.xml 配置

          作為子模塊,需要在 pom.xml 中聲明其父模塊
          <parent>
            <groupId>org.fanlychie</groupId>
            <artifactId>proj</artifactId>
            <version>1.0-SNAPSHOT</version>
          </parent>
          GAV(groupId、artifactId、version)參考父模塊。
          maven 默認(rèn)認(rèn)為父模塊是在當(dāng)前項(xiàng)目 pom.xml 所在的目錄的上一級(jí)目錄中,這里的 proj 項(xiàng)目結(jié)構(gòu)設(shè)計(jì)符合這個(gè)規(guī)則。如果你的項(xiàng)目結(jié)構(gòu)并不是
          這樣,你必須通過 <relativepath> 節(jié)點(diǎn)來指定你的父模塊 pom.xml 所在的路徑(默認(rèn)是 <relativepath>../</relativepath>)。
          <parent>
            <groupId>org.fanlychie</groupId>
            <artifactId>proj</artifactId>
            <version>1.0-SNAPSHOT</version>
            <relativePath>../</relativePath>
          </parent>
          proj-model/pom.xml 完整配置:
          <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>
            <parent>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj</artifactId>
              <version>1.0-SNAPSHOT</version>
            </parent>
            <artifactId>proj-model</artifactId>
            <packaging>jar</packaging>
            <name>proj-model project</name>
            <url>http://maven.apache.org</url>
          </project>
          groupId 和 version 會(huì)從父模塊中繼承,在子模塊中不需要再配置。

          子模塊 proj-dao/pom.xml 配置

          為該模塊聲明 proj-model 的依賴,因?yàn)樵撃K需要使用 proj-model 模塊中的數(shù)據(jù)模型
          <dependencies>
            <dependency>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj-model</artifactId>
            </dependency>
          </dependencies>
          proj-dao/pom.xml 完整配置:
          <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>
            <parent>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj</artifactId>
              <version>1.0-SNAPSHOT</version>
            </parent>
            <artifactId>proj-dao</artifactId>
            <packaging>jar</packaging>
            <name>proj-dao project</name>
            <url>http://maven.apache.org</url>
            <dependencies>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-model</artifactId>
              </dependency>
            </dependencies>
          </project>

          子模塊 proj-service/pom.xml 配置

          為該模塊聲明 proj-model、proj-dao 模塊的依賴,因?yàn)樵撃K需要使用 proj-model 中的數(shù)據(jù)模型和 proj-dao 中的數(shù)據(jù)庫訪問接口
          <dependencies>
            <dependency>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj-model</artifactId>
            </dependency>
            <dependency>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj-dao</artifactId>
            </dependency>
          </dependencies>
          proj-service/pom.xml 完整的配置:
          <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>
            <parent>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj</artifactId>
              <version>1.0-SNAPSHOT</version>
            </parent>
            <artifactId>proj-service</artifactId>
            <packaging>jar</packaging>
            <name>proj-service project</name>
            <url>http://maven.apache.org</url>
            <dependencies>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-model</artifactId>
              </dependency>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-dao</artifactId>
              </dependency>
            </dependencies>
          </project>

          子模塊 proj-web/pom.xml 配置

          為該模塊聲明 proj-model、proj-service 的依賴,因?yàn)?proj-web 需要使用 proj-model 中的數(shù)據(jù)模型和 proj-service 中的業(yè)務(wù)邏輯
          <dependencies>
            <dependency>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj-model</artifactId>
            </dependency>
            <dependency>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj-service</artifactId>
            </dependency>
          </dependencies>
          proj-web/pom.xml 完整的配置:
          <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>
            <parent>
              <groupId>org.fanlychie</groupId>
              <artifactId>proj</artifactId>
              <version>1.0-SNAPSHOT</version>
            </parent>
            <artifactId>proj-web</artifactId>
            <packaging>war</packaging>
            <name>proj-web project</name>
            <url>http://maven.apache.org</url>
            <dependencies>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-model</artifactId>
              </dependency>
              <dependency>
                <groupId>org.fanlychie</groupId>
                <artifactId>proj-service</artifactId>
              </dependency>
            </dependencies>
            <build>
              <finalName>proj-web</finalName>
            </build>
          </project>

          導(dǎo)入項(xiàng)目到 eclipse

          配置完成之后,接下來可以將項(xiàng)目導(dǎo)入到 eclipse,在 eclipse 中右鍵 --> Import --> Maven --> Existing Maven Projects,將 proj
          項(xiàng)目所在的路徑復(fù)制粘貼到 Root Directory 欄并敲回車,點(diǎn)擊 Finish 按鈕即可。

          導(dǎo)入后的項(xiàng)目結(jié)構(gòu)

          示例源碼下載:proj.zip
          示例使用 jetty 作為 web 服務(wù)器,選中 proj-web --> 右鍵 --> Run As --> Maven build... --> Goals 欄輸入 jetty:run

          記得把 Resolve Workspace artifacts 選項(xiàng)勾選上,否則啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)。訪問方式:http://localhost/info

          打包

          選中父模塊項(xiàng)目 proj --> 右鍵 --> Run As --> Maven build... --> Goals 欄輸入 clean package 并執(zhí)行。
          [INFO] Scanning for projects...
          [INFO] ------------------------------------------------------------------------
          [INFO] Reactor Build Order:
          [INFO] 
          [INFO] proj
          [INFO] proj-model project
          [INFO] proj-dao project
          [INFO] proj-service project
          [INFO] proj-web project
          [INFO]                                                                         
          [INFO] ------------------------------------------------------------------------
          . . . . . .
          [INFO] ------------------------------------------------------------------------
          [INFO] Reactor Summary:
          [INFO] 
          [INFO] proj ............................................... SUCCESS [  0.002 s]
          [INFO] proj-model project ................................. SUCCESS [  1.100 s]
          [INFO] proj-dao project ................................... SUCCESS [  0.102 s]
          [INFO] proj-service project ............................... SUCCESS [  0.069 s]
          [INFO] proj-web project ................................... SUCCESS [  0.552 s]
          [INFO] ------------------------------------------------------------------------
          [INFO] BUILD SUCCESS
          [INFO] ------------------------------------------------------------------------
           
          可以看到,maven 在 build 的時(shí)候,會(huì)根據(jù)模塊之間的依賴關(guān)系,整理出一個(gè) build 的順序,然后再按順序來 build。
          執(zhí)行完 package 后,各個(gè)子模塊的 target 目錄下會(huì)輸出相應(yīng)的 JAR 或 WAR 包。


            
          posted on 2015-06-27 16:47 fancydeepin 閱讀(27891) 評(píng)論(0)  編輯  收藏 所屬分類: maven

          隨筆分類(8)

          隨筆檔案(104)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1461123
          • 排名 - 15

          最新評(píng)論

          閱讀排行榜

          主站蜘蛛池模板: 城口县| 赤壁市| 吉安县| 黄梅县| 凤城市| 油尖旺区| 平定县| 分宜县| 衡山县| 兴文县| 饶平县| 竹溪县| 哈尔滨市| 汝阳县| 吉安市| 青海省| 丘北县| 赣州市| 瓦房店市| 乐亭县| 桐梓县| 丹阳市| 波密县| 濉溪县| 雅安市| 周至县| 伊金霍洛旗| 宜兴市| 修武县| 永仁县| 图木舒克市| 涟源市| 浪卡子县| 平顺县| 车致| 山阳县| 丁青县| 米脂县| 会理县| 沾化县| 河东区|