Maven

目錄
一.Maven
二.Maven的下載安裝
三.Maven創(chuàng)建項(xiàng)目與配置
四.Maven的常用命令
五.Maven依賴管理
六.Mavern插件管理
七.私服搭建

一.Maven

1.1 什么是Maven

Maven是由Apache開(kāi)發(fā)用于項(xiàng)目管理的工具, 是一個(gè)純 Java 開(kāi)發(fā)的開(kāi)源項(xiàng)目;

1.2 Maven的作用

  • 項(xiàng)目構(gòu)建: maven提供一套對(duì)項(xiàng)目生命周期管理的標(biāo)準(zhǔn), 開(kāi)發(fā)人員和測(cè)試人員統(tǒng)一使用maven進(jìn)行項(xiàng)目構(gòu)建;
  • 管理項(xiàng)目的生命周期:編譯,測(cè)試,打包,部署,運(yùn)行;
  • 依賴管理: maven對(duì)項(xiàng)目的第三方構(gòu)件(jar包)進(jìn)行統(tǒng)一管理; 向工程中加入jar包不要手工從其它地方拷貝,通過(guò)maven定義jar包的坐標(biāo), 自動(dòng)從maven倉(cāng)庫(kù)中去下載到工程中;
  • 對(duì)工程分模塊構(gòu)建,提高開(kāi)發(fā)效率;
  • 文檔生成等等;

1.3 Maven的約定配置

也就是項(xiàng)目目錄結(jié)構(gòu)自動(dòng)生成的配置需要遵守的規(guī)則

二.Maven的安裝

2.1 Maven的安裝

Maven的下載地址

1.將下載到的maven壓縮文件解壓到一個(gè)沒(méi)有中文的目錄;
2.配置環(huán)境變量 MAVEN_HOME和 Path與 JAVA_HOME的配置類(lèi)似;
3.配置 Maven的倉(cāng)庫(kù) Repository;
    在maven的安裝目錄中conf/settings.xml文件,在這里配置本地倉(cāng)庫(kù)(Repository)
    <localRepository>倉(cāng)庫(kù)路徑</localRepository>
    示例:<localRepository>E:/source/04_Maven/repository_pinyougou</localRepository>
4.測(cè)試Maven是否安裝成功
    打開(kāi)cmd控制吧,輸入mvn -version;

2.2 Maven的目錄介紹

bin : 命令
boot : 第三方類(lèi)加
conf : 配置文件
lib : maven自身的jar包

2.3 Maven的倉(cāng)庫(kù)和坐標(biāo)

2.3.1 Maven的倉(cāng)庫(kù)

倉(cāng)庫(kù)名稱 作用
本地倉(cāng)庫(kù) 相當(dāng)于緩存, 工程第一次會(huì)從遠(yuǎn)程倉(cāng)庫(kù)(互聯(lián)網(wǎng))去下載jar 包, 將jar包存在本地倉(cāng)庫(kù)(在程序員的電腦上); 第二次不需要從遠(yuǎn)程倉(cāng)庫(kù)去下載, 先從本地倉(cāng)庫(kù)找,如果找不到才會(huì)去遠(yuǎn)程倉(cāng)庫(kù)找;
中央倉(cāng)庫(kù) 倉(cāng)庫(kù)中jar由專(zhuān)業(yè)團(tuán)隊(duì)(maven團(tuán)隊(duì))統(tǒng)一維護(hù)。中央倉(cāng)庫(kù)的地址:http://repo1.maven.org/maven2/
遠(yuǎn)程倉(cāng)庫(kù) 在公司內(nèi)部架設(shè)一臺(tái)私服,其它公司架設(shè)一臺(tái)倉(cāng)庫(kù),對(duì)外公開(kāi);

2.3.2 Maven的坐標(biāo)

Maven的一個(gè)核心作用就是管理項(xiàng)目的依賴, 引入開(kāi)發(fā)過(guò)程中所需要的各種jar包; 為了能自動(dòng)化的解析任何一個(gè)Java構(gòu)件, Maven必須將這些Jar包或者其他資源進(jìn)行唯一標(biāo)識(shí), 這些標(biāo)識(shí)是管理項(xiàng)目依賴的基礎(chǔ), 也就有了坐標(biāo);

坐標(biāo)的定義元素如下:
    groupId:    項(xiàng)目組織唯一的標(biāo)識(shí)符, 實(shí)際對(duì)應(yīng)Java的包的結(jié)構(gòu);(如:com.alibaba)
    artifactId: 項(xiàng)目的名稱;
    version:    項(xiàng)目的當(dāng)前版本
代碼示例如下:
    <dependecies>
        <!--druid連接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>    
            <version>1.0.9</version>  
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependecies>

三.IDEA集成Maven

1.配置IDEA的Maver路徑



2.配置參數(shù)(解決創(chuàng)建慢的問(wèn)題) -DarchetypeCatalog=internal



3.最后新創(chuàng)建project,一定不要使用原來(lái)的project, 并且第一次需要聯(lián)網(wǎng);
4.創(chuàng)建出的JavaWeb工程目錄結(jié)構(gòu)圖 (一般不使用骨架創(chuàng)建工程)

四.Maven的常用命令

1.clean命令
    清除編譯產(chǎn)生的target文件夾內(nèi)容,可以配合相應(yīng)命令一起使用;
    如: mvn clean package, mvn clean test
2.compile命令
    該命令可以對(duì)src/main/java目錄的下的代碼進(jìn)行編譯;
3.test命令
    測(cè)試命令,或執(zhí)行src/test/java/下所有junit的測(cè)試用例;
4.package命令
    mvn package, 打包項(xiàng)目, 打包后的項(xiàng)目可以在target目錄下找到;
    如果是JavaSe的項(xiàng)目, 打包成jar包;
    如果是JavaWeb的項(xiàng)目, 打包成war包;
5.install命令
    打包后將其安裝在本地倉(cāng)庫(kù);(通過(guò)項(xiàng)目的包名可以在倉(cāng)庫(kù)中找到這個(gè)打包文件)

五.依賴管理和插件

5.1導(dǎo)入依賴

<!-- 示例引入junit依賴 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<!-- 示例引入servlet依賴 需要注意環(huán)境問(wèn)題,2020版idea與Maven的編譯有沖突,可以在設(shè)置中解決
勾選 maven runner中的 Delegate IDE build/run actions to Maven 
-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

5.2 依賴范圍

compile :編譯,測(cè)試,打包運(yùn)行部署有效(默認(rèn));
    如:strus-core,spring-beans,C3P0,Druid; 
provided:編譯,測(cè)試有效;打包運(yùn)行部署無(wú)效;
    如:Servlet,在運(yùn)行時(shí)不用(tomcat容器已提供,強(qiáng)行打包打出去,會(huì)有沖突問(wèn)題)
runtime :測(cè)試,打包,運(yùn)行,部署有效,編譯無(wú)效;
    如:JDBC驅(qū)動(dòng)包,在開(kāi)發(fā)代碼中針對(duì)JDBC接口開(kāi)發(fā),編譯不用,在運(yùn)行和測(cè)試是需要通過(guò)JDBC驅(qū)動(dòng)包連接數(shù)據(jù)庫(kù);
test    :只是測(cè)試有效,只在單元測(cè)試類(lèi)中用;

六.Maven的插件

6.1 Maven的插件

Maven是一個(gè)核心引擎, 提供了基本的項(xiàng)目處理能力和建設(shè)過(guò)程的管理, 以及一系列的插件來(lái)執(zhí)行實(shí)際建設(shè)任務(wù);

如: 集成JDK插件可以方便修改項(xiàng)目的編譯環(huán)境; 集成Tomcat插件后, 無(wú)需安裝Tomcat服務(wù)器就可以運(yùn)行Tomcat進(jìn)行項(xiàng)目的發(fā)布和測(cè)試;

在pom.xml中通過(guò)plugin標(biāo)簽引入maven的功能插件;

<!-- jdk編譯插件 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>utf-8</encoding>
    </configuration>
</plugin>

jdk的編譯版本也可以在maven的setting中配置:

 <profile>
      <id>jdk1.8</id>
      <activation>
           <activeByDefault>true</activeByDefault>
           <jdk>1.8</jdk>
      </activation>
      <properties>
           <maven.compiler.source>1.8</maven.compiler.source>
           <maven.compiler.target>1.8</maven.compiler.target>
           <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
           <encoding>UTF-8</encoding>
     </properties>
</profile>
<!-- Tomcat7的編譯插件
    如果想使用更高版本的Tomcat,需要到其它的倉(cāng)庫(kù)去下載,因?yàn)橹醒雮}(cāng)庫(kù)是沒(méi)有提供的 
-->
<plugins>
    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <configuration>
            <!-- 指定端口 -->
            <port>82</port>
            <!-- 請(qǐng)求路徑 -->
            <path>/</path>
        </configuration>
    </plugin>
</plugins>

6.1 修改Maven的配置

1.修改不使用骨架創(chuàng)建maven項(xiàng)目的默認(rèn)編譯版本

<profile>   
        <id>jdk1.8</id>
        <activation>   
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>   
        </activation>
        <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            <encoding>UTF-8</encoding>
        </properties>   
</profile>

將上述標(biāo)簽內(nèi)容添加到settings文件的<profiles>標(biāo)簽中

2.徹底解決引入依賴的時(shí)候卡、報(bào)錯(cuò)

修改settings.xml文件 (訪問(wèn)中央倉(cāng)庫(kù)是外網(wǎng), 會(huì)比較慢, 可以使用阿里的鏡像) ,添加如下代碼:

<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <mirror>
        <id>uk</id>
        <mirrorOf>central</mirrorOf>
        <name>Human Readable Name for this Mirror.</name>
        <url>http://uk.maven.org/maven2/</url>
    </mirror>

    <mirror>
        <id>CN</id>
        <name>OSChina Central</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>

    <mirror>
        <id>nexus</id>
        <name>internal nexus repository</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

七.Maven私服

7.1 什么是Maven私服

Maven的遠(yuǎn)程倉(cāng)庫(kù)的一種;

公司在自己的局域網(wǎng)內(nèi)搭建自己的遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器, 稱為私服; 私服服務(wù)器即是公司內(nèi)部的maven遠(yuǎn)程倉(cāng)庫(kù), 開(kāi)發(fā)人員的電腦上安裝Maven軟件并且連接私服服務(wù)器, 這樣就可以在內(nèi)部共享jar文件;

7.2 私服的搭建

? 1.下載nexus

? 2.安裝nexus與啟動(dòng)nexus: 解壓到一個(gè)沒(méi)有中文的目錄, 并進(jìn)入bin目錄, 執(zhí)行 nexus.bat install; 以管理員權(quán)限運(yùn)行命令行,進(jìn)入 bin 目錄, 執(zhí)行 nexus.bat install ; 然后在任務(wù)管理器的服務(wù)中查看是否有 nexus;

? 3.卸載nexus: cmd 進(jìn)入 nexus 的 bin 目錄,執(zhí)行: nexus.bat uninstall

? 4.登錄: 訪問(wèn) http://localhost:8081/nexus/ (查看 nexus 的配置文件 conf/nexus.properties ,里面有端口號(hào)) 然后點(diǎn)擊右上角的 Log in, 輸入賬號(hào)和密碼登陸 (賬號(hào)admin,密碼admin123 ); 點(diǎn)擊Repositories顯示倉(cāng)庫(kù)類(lèi)型

倉(cāng)庫(kù)類(lèi)型:
1.hosted
    宿主倉(cāng)庫(kù),部署自己的jar到這個(gè)類(lèi)型的倉(cāng)庫(kù),包括 relaeses和 snapshot兩部分,前者是公司內(nèi)部發(fā)布版本倉(cāng)庫(kù)
    后者是公司內(nèi)部測(cè)試版本倉(cāng)庫(kù);
2.proxy
    代理倉(cāng)庫(kù),用于代理遠(yuǎn)程的公共倉(cāng)庫(kù);如 maven中央倉(cāng)庫(kù),用戶連接私服,私服自動(dòng)去中央倉(cāng)庫(kù)下載 jar或插件;
3.group
    倉(cāng)庫(kù)組,用來(lái)合并多個(gè) hosted/proxy倉(cāng)庫(kù),通常配置自己的 maven連接倉(cāng)庫(kù)組;
4.virtual
    兼容 maven1版本的jar或插件;

7.3 私服的使用

1.將項(xiàng)目發(fā)布到私服

第一步: 修改maven的setting.xml文件的, 添加如下內(nèi)容:

<server>
    <id>releases</id>
    <username>admin</username>
    <password>admin123</password>
</server>
<server>
    <id>snapshots</id>
    <username>admin</username>
    <password>admin123</password>
</server>

配置連接私服的用戶和密碼 。此用戶名和密碼用于私服校驗(yàn),因?yàn)樗椒枰郎蟼鞯馁~號(hào)和密碼是否和私服中的賬號(hào)和密碼一致 (配置到<servers>標(biāo)簽下);

第二步: 在需要發(fā)布配置項(xiàng)目 pom.xml . 配置私服倉(cāng)庫(kù)的地址,本公司的自己的 jar 包會(huì)上傳到私服的宿主倉(cāng)庫(kù),根據(jù)工程的版本號(hào)決定上傳到哪個(gè)宿主倉(cāng)庫(kù),如果版本為 release 則上傳到私服的 release 倉(cāng)庫(kù),如果版本為snapshot 則上傳到私服的 snapshot 倉(cāng)庫(kù)

<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
</distributionManagement>

注意: pom.xml 這里<id> 和 settings.xml 配置 <id> 對(duì)應(yīng)!

E:\java_develop\nexus-2.12.0-01-bundle\sonatype-work\nexus\storage

第三步: 測(cè)試

首先啟動(dòng) nexus , 然后執(zhí)行 deploy 命令, 然后在 nexus 的 sonatype-work\nexus\storage目錄下通過(guò)包名去查看剛剛上傳到私服的文件;

2.從私服下載jar包

沒(méi)有配置 nexus 之前,如果本地倉(cāng)庫(kù)沒(méi)有,去中央倉(cāng)庫(kù)下載;

通常在企業(yè)中會(huì)在局域網(wǎng)內(nèi)部署一臺(tái)私服服務(wù)器,有了私服本地項(xiàng)目首先去本地倉(cāng)庫(kù)找 jar,如果沒(méi)有找到則連接私服從私服下載 jar 包,如果私服沒(méi)有 jar 包私服同時(shí)作為代理服務(wù)器從中央倉(cāng)庫(kù)下載 jar 包;

在客戶端的 setting.xml 中配置私服的倉(cāng)庫(kù), 由于 setting.xml 中沒(méi)有 repositories 的配置標(biāo)簽需要使用 profile 定義倉(cāng)庫(kù); (配置在<profiles>標(biāo)簽下)

<profile>
    <!--profile 的 id-->
    <id>dev</id>
    <repositories>
        <repository>
        <!--倉(cāng)庫(kù) id, repositories 可以配置多個(gè)倉(cāng)庫(kù),保證 id 不重復(fù)-->
        <id>nexus</id>
        <!--倉(cāng)庫(kù)地址,即 nexus 倉(cāng)庫(kù)組的地址-->
        <url>http://localhost:8081/nexus/content/groups/public/</url>
        <!--是否下載 releases 構(gòu)件-->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!--是否下載 snapshots 構(gòu)件-->
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    </repositories>
    <pluginRepositories>
        <!-- 插件倉(cāng)庫(kù), maven 的運(yùn)行依賴插件,也需要從私服下載插件 -->
        <pluginRepository>
            <!-- 插件倉(cāng)庫(kù)的 id 不允許重復(fù),如果重復(fù)后邊配置會(huì)覆蓋前邊 -->
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://localhost:8081/nexus/content/groups/public/</url>
        </pluginRepository>
    </pluginRepositories>
</profile>

使用 profile 定義倉(cāng)庫(kù)需要激活才可生效

<activeProfiles>
    <activeProfile>dev</activeProfile>
</activeProfiles>

3.把第三方j(luò)ar包放入本地倉(cāng)庫(kù)和私服

1.導(dǎo)入本地庫(kù)

示例: 將fastjson-1.2.39的jar放到本地倉(cāng)庫(kù)

找一個(gè)jar測(cè)試, 先 CMD 進(jìn)入到 jar 包所在位置, 然后運(yùn)行下面命令:

mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.2.39 -Dfile=fastjson-1.2.39.jar -Dpackaging=jar

在Maven倉(cāng)庫(kù)的 \com\alibaba 目錄下可以找到這個(gè)jar文件

2.導(dǎo)入私服

示例: 將fastjson-1.2.39的jar放到私服倉(cāng)庫(kù)

<!-- 要在 maven 軟件的核心配置文件 settings.xml 中配置第三方倉(cāng)庫(kù)的 server 信息 -->
<server>
    <id>thirdparty</id>
    <username>admin</username>
    <password>admin123</password>
</server>
然后 CMD 進(jìn)入到 jar 包所在位置, 然后運(yùn)行下面命令:

mvn deploy:deploy-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.2.39 -Dpackaging=jar -Dfile=fastjson-1.2.39.jar -Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty

文件訪問(wèn): 在nexus的 sonatype-work\nexus\storage\thirdparty 目錄下可以找到這個(gè)jar包; 
通過(guò)瀏覽器訪問(wèn): "http://localhost:8081/nexus/", 然后nexus——>repositories——>thirdparty可以找到這個(gè)jar包;

3.導(dǎo)入第三方 jar 包時(shí)執(zhí)行的命令參數(shù)

DgroupId 和 DartifactId:
    構(gòu)成了該 jar 包在 pom.xml 的坐標(biāo),項(xiàng)目就是依靠這兩個(gè)屬性定位; 自己起名字也行; 
Dfile:
    表示需要上傳的 jar 包的絕對(duì)路徑;(包含文件名,上面的命令中是使用相對(duì)路徑)
Durl:
    私服上倉(cāng)庫(kù)的位置,瀏覽器上訪問(wèn) "http://localhost:8081/nexus/"  
    然后找到nexus——>repositories 菜單,可以看到該路徑在靠右邊的位置;(沒(méi)有這個(gè)參數(shù)表示本地倉(cāng)庫(kù))
DrepositoryId: 
    服務(wù)器倉(cāng)庫(kù)的表示 id (表示上傳到哪一個(gè)倉(cāng)庫(kù)),在 nexus 的 configuration 可以看到;
Dversion:
    表示版本信息;(解壓jar包,在 MANIFEST.MF 的文件中有描述該包的版本信息);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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