国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Maven pom.xml中的元素modules、parent、properties以及import

前言

  項(xiàng)目中用到了maven,而且用到的內(nèi)容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么簡單;maven的核心是pom.xml,那么我就它來談?wù)勀切┎煌牡胤剑?/p>

  給我印象最深的就是如下四個(gè)元素:modules、parent、properties、import。

modules

  從字面意思來說,module就是模塊,而pom.xml中的modules也正是這個(gè)意思,用來管理同個(gè)項(xiàng)目中的各個(gè)模塊;如果maven用的比較簡單,或者說項(xiàng)目的模塊在pom.xml沒進(jìn)行劃分,那么此元素是用不到的;不過一般大一點(diǎn)的項(xiàng)目是要用到的。

  1.需求場景

    如果我們的項(xiàng)目分成了好幾個(gè)模塊,那么我們構(gòu)建的時(shí)候是不是有幾個(gè)模塊就需要構(gòu)建幾次了(到每個(gè)模塊的目錄下執(zhí)行mvn命令)?當(dāng)然,你逐個(gè)構(gòu)建沒問題,但是非要這么麻煩的一個(gè)一個(gè)的構(gòu)建嗎,那么簡單的做法就是使用聚合,一次構(gòu)建全部模塊。

  2.具體實(shí)現(xiàn)

    a.既然使用聚合,那么就需要一個(gè)聚合的載體,先創(chuàng)建一個(gè)普通的maven項(xiàng)目account-aggregator,如下圖:

  

    因?yàn)槭莻€(gè)聚合體,僅僅負(fù)責(zé)聚合其他模塊,那么就只需要上述目錄,該刪除的就刪了;注意的是pom文件的書寫(紅色標(biāo)明的):

<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>com.youzhibing.account</groupId>  <artifactId>account-aggregator</artifactId>  <version>1.0.0-SNAPSHOT</version>  <packaging>pom</packaging>  <name>Account Aggrregator</name>  <url>http://maven.apache.org</url>    <modules>
    <!-- 模塊都寫在此處 --> <module>account-register</module> <module>account-persist</module> </modules>
</project>

    b.創(chuàng)建子模account-register、account-persist:右擊account-aggregator,new --> other --> Maven,選擇Maven Module,創(chuàng)建moven模塊。

    c.創(chuàng)建完成后,項(xiàng)目結(jié)構(gòu)如下,那么此時(shí)account-aggregator可以收縮起來了,我們操作具體子模塊就好了。

                         

     d.注意點(diǎn),當(dāng)我們打開包結(jié)構(gòu)的子模塊的pom文件時(shí),發(fā)現(xiàn)離預(yù)期的多了一些內(nèi)容,我們坐下處理就好了。

    e.那么編碼完了之后,我們只需要構(gòu)建account-aggregator就好了,所有的子模塊都會(huì)構(gòu)建。

parent

  繼承,和java中的繼承相當(dāng),作用就是復(fù)用

  1.需求場景

    若每個(gè)子模塊都都用的了spring,那么我們是不是每個(gè)子模塊都需要單獨(dú)配置spring依賴了?,這么做是可以的,但是我們有更優(yōu)的做法,那就是繼承,用parent來實(shí)現(xiàn)。

  2.具體實(shí)現(xiàn)

    a.配置父pom.xml

      我就用聚合pom來做父pom,配置子模塊的公共依賴。

      父(account-aggregator)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>com.youzhibing.account</groupId>  <artifactId>account-aggregator</artifactId>  <version>1.0.0-SNAPSHOT</version>  <packaging>pom</packaging>  <name>Account Aggrregator</name>  <url>http://maven.apache.org</url>    <modules>      <!-- 模塊都寫在此處 -->      <module>account-register</module>      <module>account-persist</module>  </modules>    <dependencies> <!-- 配置共有依賴 -->      <!-- spring 依賴 -->      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>          <!-- junit 依賴 -->      <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.7</version>      <scope>test</scope>    </dependency>  </dependencies></project>
View Code

    b.account-register的pom.xml :

<?xml version="1.0"?><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>    <groupId>com.youzhibing.account</groupId>    <artifactId>account-aggregator</artifactId>    <version>1.0.0-SNAPSHOT</version>    <relativePath>../pom.xml</relativePath> <!-- 與不配置一樣,默認(rèn)就是尋找上級(jí)目錄下得pom.xml -->  </parent>  <artifactId>account-register</artifactId>  <name>account-register</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <!-- 配置自己獨(dú)有依賴 -->      <dependency>          <groupId>javax.mail</groupId>          <artifactId>mail</artifactId>          <version>1.4.3</version>      </dependency>    <dependency>      <groupId>com.icegreen</groupId>      <artifactId>greenmail</artifactId>      <version>1.4.1</version>      <scope>test</scope>    </dependency>  </dependencies></project>
View Code

    c.account-persist的pom.xml :

<?xml version="1.0"?><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>    <groupId>com.youzhibing.account</groupId>    <artifactId>account-aggregator</artifactId>    <version>1.0.0-SNAPSHOT</version>  </parent>  <artifactId>account-persist</artifactId>  <name>account-persist</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <!-- 配置自己獨(dú)有依賴 -->    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-jdbc</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>druid</artifactId>        <version>1.0.16</version>    </dependency>  </dependencies></project>
View Code

    d.依賴的jar包全部ok,需要做的則是在各個(gè)模塊中進(jìn)行代碼開發(fā)了!

  3.依賴管理

    繼承可以消除重復(fù),那是不是就沒有問題了? 答案是存在問題,假設(shè)將來需要添加一個(gè)新的子模塊account-util,該模塊只是提供一些簡單的幫助工具,不需要依賴spring、junit,那么繼承后就依賴上了,有沒有什么辦法了? 有,maven已經(jīng)替我們想到了,那就是dependencyManagement元素,既能讓子模塊繼承到父模塊的依賴配置,又能保證子模塊依賴使用的靈活性。在dependencyManagement元素下得依賴聲明不會(huì)引入實(shí)際的依賴,不過它能夠約束dependencies下的依賴使用。

    在父pom.xml中配置dependencyManagement元素

<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>com.youzhibing.account</groupId>  <artifactId>account-aggregator</artifactId>  <version>1.0.0-SNAPSHOT</version>  <packaging>pom</packaging>  <name>Account Aggrregator</name>  <url>http://maven.apache.org</url>    <modules>      <!-- 模塊都寫在此處 -->      <module>account-register</module>      <module>account-persist</module>  </modules>    <dependencyManagement>      <dependencies> <!-- 配置共有依賴 -->      <!-- spring 依賴 -->      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>          <!-- junit 依賴 -->      <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.7</version>      <scope>test</scope>    </dependency>  </dependencies>  </dependencyManagement></project>
View Code

    account-persist的pom.xml(account-register也一樣) :

<?xml version="1.0"?><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>    <groupId>com.youzhibing.account</groupId>    <artifactId>account-aggregator</artifactId>    <version>1.0.0-SNAPSHOT</version>  </parent>  <artifactId>account-persist</artifactId>  <name>account-persist</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>      <!-- spring 依賴 -->      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>    </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>    </dependency>          <!-- junit 依賴 -->      <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-jdbc</artifactId>        <version>4.0.2.RELEASE</version>    </dependency>    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>druid</artifactId>        <version>1.0.16</version>    </dependency>  </dependencies></project>
View Code

     使用這種依賴管理機(jī)制似乎不能減少太多的POM配置,就少了version(junit還少了個(gè)scope),感覺沒啥作用呀;其實(shí)作用還是挺大的,父POM使用dependencyManagement能夠統(tǒng)一項(xiàng)目范圍中依賴的版本,當(dāng)依賴版本在父POM中聲明后,子模塊在使用依賴的時(shí)候就無須聲明版本,也就不會(huì)發(fā)生多個(gè)子模塊使用版本不一致的情況,幫助降低依賴沖突的幾率。如果子模塊不聲明依賴的使用,即使該依賴在父POM中的dependencyManagement中聲明了,也不會(huì)產(chǎn)生任何效果。

import

  import只在dependencyManagement元素下才有效果,作用是將目標(biāo)POM中的dependencyManagement配置導(dǎo)入并合并到當(dāng)前POM的dependencyManagement元素中,如下就是講account-aggregator中的dependencyManagement配置導(dǎo)入并合并到當(dāng)前POM中。

<dependencyManagement>      <dependencies>        <dependency>            <groupId>com.youzhibing.account</groupId>              <artifactId>account-aggregator</artifactId>              <version>1.0.0-SNAPSHOT</version>            <type>pom</type>              <scope>import</scope>        </dependency>      </dependencies>  </dependencyManagement>

properties(Maven屬性)

  通過<properties>元素用戶可以自定義一個(gè)或多個(gè)Maven屬性,然后在POM的其他地方使用${屬性名}的方式引用該屬性,這種做法的最大意義在于消除重復(fù)和統(tǒng)一管理。

  Maven總共有6類屬性,內(nèi)置屬性、POM屬性、自定義屬性、Settings屬性、java系統(tǒng)屬性和環(huán)境變量屬性;

  1.內(nèi)置屬性

    兩個(gè)常用內(nèi)置屬性 ${basedir} 表示項(xiàng)目跟目錄,即包含pom.xml文件的目錄;${version} 表示項(xiàng)目版本

  2.POM屬性

    用戶可以使用該類屬性引用POM文件中對(duì)應(yīng)元素的值。如${project.artifactId}就對(duì)應(yīng)了<project> <artifactId>元素的值,常用的POM屬性包括:

    ${project.build.sourceDirectory}:項(xiàng)目的主源碼目錄,默認(rèn)為src/main/java/

    ${project.build.testSourceDirectory}:項(xiàng)目的測試源碼目錄,默認(rèn)為src/test/java/

    ${project.build.directory} : 項(xiàng)目構(gòu)建輸出目錄,默認(rèn)為target/

    ${project.outputDirectory} : 項(xiàng)目主代碼編譯輸出目錄,默認(rèn)為target/classes/

    ${project.testOutputDirectory}:項(xiàng)目測試主代碼輸出目錄,默認(rèn)為target/testclasses/

    ${project.groupId}:項(xiàng)目的groupId

    ${project.artifactId}:項(xiàng)目的artifactId

    ${project.version}:項(xiàng)目的version,與${version} 等價(jià)

    ${project.build.finalName}:項(xiàng)目打包輸出文件的名稱,默認(rèn)為${project.artifactId}-${project.version}

  3.自定義屬性

    如下account-aggregator的pom.xml,那么繼承了此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>com.youzhibing.account</groupId>  <artifactId>account-aggregator</artifactId>  <version>1.0.0-SNAPSHOT</version>  <packaging>pom</packaging>  <name>Account Aggrregator</name>  <url>http://maven.apache.org</url>    <modules>      <!-- 模塊都寫在此處 -->      <module>account-register</module>      <module>account-persist</module>      <module>account-another</module>  </modules>    <properties>      <!-- 定義 spring版本號(hào) -->    <spring.version>4.0.2.RELEASE</spring.version>    <junit.version>4.7</junit.version>  </properties>    <dependencyManagement>      <dependencies> <!-- 配置共有依賴 -->      <!-- spring 依賴 -->      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>${spring.version}</version>    </dependency>      <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-beans</artifactId>        <version>${spring.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>${spring.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>${spring.version}</version>    </dependency>          <!-- junit 依賴 -->      <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>${junit.version}</version>      <scope>test</scope>    </dependency>  </dependencies>  </dependencyManagement></project>
View Code

  4.Settings屬性

    與POM屬性同理,用戶使用以settings. 開頭的屬性引用settings.xml文件中的XML元素的值。

  5.Java系統(tǒng)屬性

    所有java系統(tǒng)屬性都可以用Maven屬性引用,如${user.home}指向了用戶目錄。

  6.環(huán)境變量屬性

    所有環(huán)境變量屬性都可以使用以env. 開頭的Maven屬性引用,如${env.JAVA_HOME}指代了JAVA_HOME環(huán)境變量的的值。

聚合與繼承的關(guān)系

  1.聚合主要是為了方便快速構(gòu)建項(xiàng)目,繼承主要是為了消除重復(fù)配置;

  2.對(duì)于聚合模塊而言,它知道有哪些被聚合的模塊,但那些被聚合的模塊不知道這個(gè)聚合模塊的存在;對(duì)于繼承的父pom而言,它不知道有哪些子模塊繼承它,但那些子模塊都必須知道自己的父POM是什么;

  3.聚合POM與繼承中的父POM的packaging都必須是pom;同時(shí),聚合模塊與繼承中的父模塊除了POM外,都沒有實(shí)際的內(nèi)容

結(jié)束語

  maven越來越流行,這方面的資料也是越來越多,《Maven實(shí)戰(zhàn)》給我的感覺就相當(dāng)不錯(cuò),本博客的內(nèi)容大多取自其中;網(wǎng)上資料也越來越多,就博客園中就有不少;

  最后強(qiáng)調(diào)一點(diǎn):看了是好,實(shí)踐更好,寫博客記錄下來那是最好!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Maven入門
Spring Boot 多模塊項(xiàng)目創(chuàng)建與配置 (一)
多模塊SSM RBAC案例項(xiàng)目環(huán)境搭建一項(xiàng)目框架搭建
Maven項(xiàng)目管理工具:Maven依賴
[maven2]maven2下pom.xml的json-lib的配置
pom.xml
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服