Maven入門

Maven入門

mvn的常用指令

  • mvn -v:查看maven版本
  • mvn -compile:編譯
  • mvn -test:測試
  • mvn- package:打包
  • mvn -clean:刪除target目錄
  • mvn -install:安裝jar包到本地倉庫中。

當項目缺乏依賴時,需要將jar包添加到本地倉庫中,或者從網(wǎng)上下載后添加到本地倉庫中。比如我們要開發(fā)SpringBoot應(yīng)用,就需要添加如下依賴。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

groupId是項目組織名,artifactId是項目名。groupId一般的格式是域.公司,比如com.tencent,如果它有項目名為qq,那么包名一般就是com.tencent.qq。

自動化創(chuàng)建項目的目錄骨架

創(chuàng)建目錄可以使用下面的命令

1. mvn archetype:generate 按照提示進行選擇
 
2. mvn archetype:generate -DgroupId=組織名
                          -DartifactId=項目名-模塊名
                          -Dversion=版本號
                          -Dpackage=項目所在的包
 

倉庫

Maven的中央倉庫訪問起來可能比較慢,通過設(shè)置鏡像倉庫,可以改善這個問題,推薦使用阿里云的鏡像。在settings.xml中添加如下<mirror>標簽

<mirrors>
    <mirror>
        <id>nexus-ailiyun</id>
        <mirrorOf>*</mirrorOf> 
        <name>Nexus ailiyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
</mirrors>

從網(wǎng)上的倉庫中下載下來的jar包會保存在本地,下次添加依賴時如果本地倉庫中已經(jīng)存在了,就不必從網(wǎng)上下載了。本地倉庫默認位置在C:Users/your-username/.m2,如果要更換默認位置,可以修改settings.xml文件

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

<localRepository>取消注釋,選一個合適的路徑來作為本地倉庫。

pom.xml

pom是maven項目的核心管理文件,用于項目描述、組織管理、依賴管理和構(gòu)建信息的管理。

<?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">
    <!-- 指定了當前pom的版本 -->
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.shy(組織域名的反寫)</groupId>
    <artifactId>springboot(項目名)</artifactId>
    <!-- 0.0.1-SNAPSHOT
    第一個0表示大版本
     第二個0表示分支版本號,第三個1表示小版本號
    SNAPSHOT表示快照版本
    ALPHA表示內(nèi)測版
    BETA表示公測版
    RELEASE表示穩(wěn)定版
    -->
    <version>0.0.1-SNAPSHOT(版本號)</version>
    <!-- maven項目的打包方式,默認是jar,也可以打包成war、zip、pom -->
    <packaging>jar</packaging>
    <!-- 項目名 -->
    <name>springboot</name>
    <!-- 項目的描述 -->
    <description>Demo project for Spring Boot</description>
 
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <!-- 依賴范圍,表示Junit只在測試環(huán)境下使用
                 還有以下范圍
                compile:默認的范圍,編譯測試運行都有效;
                provided:在編譯和測試時有效,在實際運行時不會被加入
                system: 在編譯和測試時有效,與本機系統(tǒng)相關(guān)聯(lián),可移植性差
                import: 只使用在 dependencyManagement標簽中,表示從其他的pom中導(dǎo)入dependency配置
            -->
            <scope>test</scope>
 
            <!-- <optional></optional>設(shè)置依賴是否可選 -->
            <!--
                exclusions設(shè)置排除依賴傳遞的列表。如果A依賴于B,B又依賴于C,我們說存在依賴關(guān)系,在A中引入B時候,會自動引入C。如果不想引入C,可以在exclusions中將其排除。
                <exclusions></exclusions>
            -->
        </dependency>
    </dependencies>
 
    <build>
        <!-- 插件類,也要指定“坐標” -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
 
</project>
 

依賴范圍

  • compile:默認的范圍,編譯測試運行都有效;
  • provided:在編譯和測試時有效,在實際運行時不會被加入
  • test:只在測試環(huán)境下使用
  • system: 在編譯和測試時有效,與本機系統(tǒng)相關(guān)聯(lián),可移植性差
  • import: 只使用在 dependencyManagement標簽中,表示從其他的pom中導(dǎo)入dependency配置

依賴傳遞

exclusions標簽:設(shè)置排除依賴傳遞的列表。如果A依賴于B,B又依賴于C,我們說存在依賴關(guān)系,在A中引入B時候,會自動引入C。如果不想引入C,可以在exclusions中將其排除。

依賴沖突

1、短路徑優(yōu)先
如果有兩條依賴傳遞關(guān)系

1) A -> B -> C -> X(jar)
 
2) A -> D -> X(jar)

會選擇短的路徑2。

2、誰先聲明誰優(yōu)先

在pom文件中,哪個依賴寫在前面就優(yōu)先引用該依賴。

繼承

用于在子模塊中對父模塊的一個pom的繼承,作用就是對代碼的復(fù)用。比如在SpringBoot項目的pom文件中就有下面的幾行。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

模塊的聚合

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

<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>
    <!-- 聚合pom.xml文件的打包方式必須是pom -->
  <packaging>pom</packaging> 
  <modules>    <!-- 模塊都寫在此處 -->
      <module>account-register</module>
      <module>account-persist</module>
  </modules>
</project>
 

如上,只需對account-aggregator進行打包,就能一次性構(gòu)建所有模塊了。聚合POM與繼承中的父POM的packaging標簽都必須是pom。

dependencies和dependencyManagement的區(qū)別

  • dependencies即使在子項目中不寫該依賴項,那么子項目仍然會從父項目中繼承該依賴項(全部繼承)
  • dependencyManagement里只是聲明依賴,并不實現(xiàn)引入。如果在子項目不聲明依賴,是不會從父項目中繼承下來的;所以要添加依賴還需顯式聲明,如果沒有指定具體版本,會從父項目中繼承該項,并且version和scope都讀取自父pom;但是如果子項目中指定了版本號,那么就使用子項目中指定的jar版本。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡介 概述 Maven 是一個項目管理和整合工具 Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,507評論 6 39
  • 導(dǎo)語 最近在學(xué)習Java了,以后分享的文章主要就以Java為主了,偶爾也會分享一下Objective-C方面的文章...
    國士無雙A閱讀 11,868評論 0 24
  • Maven入門教程 1.1.介紹、環(huán)境配置 1.1.1.Maven介紹 Maven是一個采用純Java編寫的開源項...
    安易學(xué)車閱讀 1,502評論 2 10
  • GCD學(xué)習一 GCD學(xué)習二 GCD學(xué)習三 我不會講太多理論,這篇是我自己的理解。 舉個例子: 汽車進入維修廠的關(guān)...
    FredYJH閱讀 347評論 0 0
  • 文/攬衣 【一】 浩浩蕩蕩的軍隊開赴戰(zhàn)場,領(lǐng)軍的那個少年,器宇軒昂雄姿英發(fā)。他是邶國最年輕的大將軍,鳶王邶鳶。另外...
    攬衣閱讀 321評論 1 1

友情鏈接更多精彩內(nèi)容