maven總結(三)-- pom.xml文件,maven中的關系,私服


一. pom.xml文件

1.1 簡介

  pom:project object model 項目對象模型
  pom.xml是Maven的核心配置文件
  一個Maven項目有且只有一個pom.xml文件,該文件必須在項目的根目錄下

1.2 坐標

1.2.1 什么是坐標
  (1)用來唯一的標識每個標識,必須為項目定義坐標,坐標必須唯一
  (2)目的是為了讓其他Maven項目可以使用該項目生成的jar包

1.2.2 坐標詳解
  Maven坐標是通過一些元素來定義:groupId、artifactId、version

 1 <!­­
 2 坐標:
 3 groupId:組織Id,表示當着模塊所隸屬的項目
 4 artifactId:模塊id
 5 version:當前的版本
 6 ­­>
 7 <groupId>com.wfz.study</groupId>
 8 <artifactId>maven01</artifactId>
 9 <version>1.0­SNAPSHOT</version>

1.3 依賴

1.3.1 基本配置

   如何查找一個jar包的坐標?
  http://search.maven.org/ http://mvnrepository.com/ http://maven.aliyun.com/nexus/#

 1.3.2 如何查找一個坐標

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql­connector­java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>commons­fileupload</groupId>
<artifactId>commons­fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency

1.3.3  scope作用域

 表示依賴的作用域,用來配置依賴的jar包可使用的范圍

取值 含義 舉例

compile
該依賴可以在整個項目中使用,參與打包部署,默認值 commons­fileupload

test
該依賴只能在測試代碼中使用,不參與打包部署  junit


provided
該依賴編寫源代碼時需要,不參與打包部署 servlet­api、jsp­api

runtime
該依賴編寫代碼時不需要,運行時需要,參與打包部署 mysql­connector

system
表示使用本地系統路徑下的jar包,需要和systemPath一起使用 ojdbc.jar ojdbc.jar



 

 

 

 

                                                                                                                                                                                                                    

1.3.4  properties
全局屬性,一般情況下用於定義全局的jar包版本

<properties>
<project.build.sourceEncoding>UTF­8</project.build.sourceEncoding>
<fileupload.version>1.3.1</fileupload.version>
<junit.version>4.12</junit.version>
<mysql­connector­java.version>5.1.38</mysql­connector­java.version>
<spring.version>4.3.12.RELEASE</spring.version>
</properties>
<dependencies>
<!­­ junit ­­>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

 1.3.5 repositories

用來配置當前工程使用的遠程倉庫
依賴查找順序:本地倉庫——>當前工程pom.xml中配置的遠程倉庫——>setting.xml中配置的遠程倉庫

<!­­ 配置遠程倉庫 ­­>
<repositories>
<!­­ 有些最新的jar包,可能在中央倉庫上並沒有提供,此時可以使用jar包官方提供的倉庫 ­
­>
<repository>
<id>spring_repo</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<!­­ maven­clean­plugin­­>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven­clean­plugin</artifactId>
<version>2.6.1</version>
</plugin>
<!­­ tomcat插件 ­­>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7­maven­plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/maven01</path>
<port>8888</port>
</configuration>
</plugin>

1.3.6  plugins
  配置插件,是一種工具,項目並不依賴於它。比如:

  • maven­clean­plugin
  • maven­compile­plugin
<!­­ maven­clean­plugin­­>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven­clean­plugin</artifactId>
<version>2.6.1</version>
</plugin>
<!­­ tomcat插件 ­­>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7­maven­plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/maven01</path>
<port>8888</port>
</configuration>
</plugin>

 1.3.7 超級POM

  所有的pom.xml文件都繼承一個父POM,這個父POM稱為超級POM(Super POM、Effective POM)

 二. Maven中的關系

2.1 繼承

  一個Maven項目可以繼承自另一個Maven項目,分為稱為子項目、父項目
  場景:多個子項目中使用的是相同的依賴或插件,此時可以把相同的配置抽取到一個父項目中,進行統一的管理,保持一致性

步驟:
1. 將父項目的打包方式設置為pom

<!­­
打包方式:
jar:Java項目的打包方式,默認值
war:Web項目的打包方式
pom:父項目的打包方式
­­>
<packaging>pom</packaging>

 2. 在子項目中引用父項目,指定父項目的坐標

<!­­ 引用父項目,指定父項目的坐標 ­­>
<parent>
<groupId>com.wfz.study</groupId>
<artifactId>parent</artifactId>
<version>1.0­SNAPSHOT</version>
<!­­ 指定父項目的pom.xml文件的相對物理路徑 ­­>
<relativePath>../parent/pom.xml</relativePath>
</parent>

 問題:有時並不是父項目的所有依賴都需要被子項目繼承,但是又希望能夠通過父項目對依賴進行統一管理,如版本的控制

解決:

使用dependencyManagement

步驟:1. 在父項目中配置dependencyManagement

    dependencies:如果不用dependencyManagement做依賴管理的話,父工程的所有依賴都是可以被子工程繼承的(但特殊情況除外:scopecompile的依賴會被傳遞,scopetest的依賴不會被傳遞,配置optionaltrue的依賴不會被傳遞等)
    問題:有時並不是父項目的所有依賴都需要被子項目繼承,但是又希望能夠通過父項目對依賴進行統一管理,如版本的控制,Scope范圍管理等,此時使用dependencyManagementjar包進行統一管理

    dependencyManagement:表示父項目只進行依賴管理,依賴(groupId,artifactId)默認不會被子項目繼承;但是version,scope可以被繼承,子工程只需寫groupId,artifactId即可,version,scope會從父工程繼承過來.但是如果子工程中也     配置version,scope的話,會默認覆蓋掉父工程的version,scope. 

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>

            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>${commons-fileupload.version}</version>
                <scope>compile</scope>
            </dependency>
</dependencies>

    </dependencyManagement>

 2. 在子項目中引用父項目中的

 <!-- 子項目引用父項目的依賴,默認繼承了父項目的version,scope,
         此時只需要再配置groupId,artifactId引用父項目的依賴就可以啦-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
        </dependency>
</dependencies>

 2.2 聚合

將多個子項目添加到一個父項目中,然后通過能父項目進行操作,從而實現對所有聚合的子項目的操作

 <!--
      聚合:將多個子項目添加到一個父項目中,然后通過對父項目進行操作,從而實現對所有聚合的子項目的操作
      聚合子項目:指定子項目的根目錄
      ../代表上一級目錄
  -->
    <modules>
        <module>../child03</module>
        <module>../child01</module>
        <module>../child02</module>
    </modules>

 2.3 依賴

項目C——>項目B——>項目A
概念:如果項目C依賴於項目B,項目B依賴項目A,則項目C也依賴於項目A,這叫依賴的傳遞
配置依賴關系:child03——>child02——>child01

2.3.1 控制依賴的傳遞

  並不是所有的依賴都會被傳遞:

  • scope為compile的依賴會被傳遞
  • scope為test的依賴不會被傳遞
  • 配置optional為true的依賴不會被傳遞
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<optional>true</optional>
</dependency

 2.3.2 不會出現jar包的沖突

使用maven不會jar包沖突,通過兩個原則來保證:
就近原則
child03——>child02——>child01
優先定義原則
child03——>child02——>child01
      ——>child04

2.3.3 不要傳遞的依賴

方式1:在依賴的項目中配置不允許傳遞

<optional>true</optional>

 方式2:在當前項目中配置不接收傳遞的特定依賴

<!­­ 依賴於child01­­>
<dependency>
<groupId>com.itany.study</groupId>
<artifactId>child01</artifactId>
<version>1.0­SNAPSHOT</version>
<!­­ 不接收特定的依賴 ­­>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

 三.使用Nexus搭建Maven私服

3.1 為什么要搭建私服

  公司不提供外網給開發人員,無法使用maven訪問遠程倉庫,此時可以在局域網內找一台能訪問外網的電腦搭建maven私服

3.2 Nexus工具

  用來搭建Maven私服的工具

       下載地址:https://pan.baidu.com/s/1mCfnGci42uSPb8W2VmKfHw

       驗證碼:s8ba

      下載完畢之后,在D:\soft\maven\nexus\nexus-2.12.0-01\bin\jsw\windows-x86-64(我自己的安裝地址)安裝啟動私服即可。

     常用的三個命令:

      install-nexus.bat:運行install-nexus.bat安裝maven私服

     start-nexus.bat:運行私服

     stop-nexus.bat:停止私服

3.3 操作步驟

  步驟:
  1. 解壓縮並安裝為系統服務

  2.訪問

    http://localhost:8081/nexus

3.4 登陸並配置私服

  登陸賬戶和密碼:admin/admin123
  1. 添加阿里雲代理(鏡像)倉庫到私服中
  2. 添加本地jar到私服中

  好了,maven的相關東西就總結到這里,如果后續有需要繼續完善的,再做補充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM