1、配置環境變量
1.1、方式一
M2_HOME
1.2、方式二
1.3、 查看是否配置成功
mvn -version
2、配置maven遠程倉庫地址
2.1、本地maven加載順序
查找遠程地址:maven\lib\maven-model-builder-3.3.9.jar
打開pom文件:
這個地址就是遠程倉庫地址:
https://repo.maven.apache.org/maven2
2.2、配置國內遠程倉庫
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3、pom文件
3.1、scope的值
test:作用域在測試環境
compile (默認)編譯和運行都生效
provide 編譯生效 打包不生效
runtime 編譯不生效 打包生效
3.2、組成的基本元素:
元素 | 可選值 | 描述 |
---|---|---|
groupId | 分組ID | |
artifactId | 模塊id | |
version | 版本 | |
packaging | jar、pom、war | 打包類型 |
modelVersion | 對應的超級pom 版本 | |
dependencies | 項目依懶包 |
3.3、基本命令
mvn clean // 清理target目錄
mvn compile // 編譯
mvn test // 測試
mvn package // 打包
mvn install // 打包並上傳到本地倉庫
mvn depeloy // 上傳到遠程倉庫
mvn -Dmaven.test.skip=true // 跳過測試
4、聚合
4.1、介紹
常說的父工程就是聚合工程,它將多個子工程聚合起來,這樣的話,直接使用maven編譯打包父工程即可;
<modules>
<module>maltose-registry</module>
<module>maltose-api-gateway</module>
<module>maltose-item</module>
<module>maltose-common</module>
</modules>
其中,每一個model是子工程的artifactId值;
4.2、依賴傳遞
controller依賴service,service依賴dao;
如果service與dao的pom文件裏都有同一個jar包—log4j.jar,但是版本不一致,那麼maven是如何處理這種情況?
service的pom裏,誰在前邊寫的,那麼就是用的是誰;即:pom文件裏有相同依賴,不同版本時,誰寫在前,就依賴的是誰
5、linux7.13下搭建nexus3.18私服
5.1、nexus搭建
上傳nexus包,並解壓(nexus下載)
tar -zxvf nexus-3.18.1-01-unix.tar.gz
各個版本下載地址:
https://help.sonatype.com/repomanager3/download
https://help.sonatype.com/repomanager3/download/download-archives—repository-manager-3
解壓後生成下邊兩個文件夾:
倉庫裏目前是空的,當有jar包上傳上來後,就有jar包了;
配置環境變量,設置使用哪個用戶啓動Nexus
vi /etc/profile
#添加如下配置項,後邊的值是用戶名,一般不要設置root用戶
export RUN_AS_USER=root
使配置文件生效:source /etc/profile
啓動nexus:
進入到剛解壓後的安裝源文件下的bin目錄,執行如下命令啓動nexus
# 不顯示日誌的啓動
./nexus start
# 如下命令也可以啓動——顯示日誌
./nexus run &
瀏覽器訪問(默認端口是8081)
http://192.168.11.129:8081/
登錄:
點擊右上角的Sign in,默認用戶名admin,默認密碼在sonatype-work/nexus3/admin.password裏,當前最新版本nexus3.18默認密碼不是admin123了,如下圖
登錄:
第一次登錄要求改密碼:
輸入新密碼後點擊NEXT
點擊finish,修改密碼完成:
修改默認端口:
手動更新索引:
1、前往maven中央倉庫下載indexer-cli-5.1.1.jar;
下載地址:
http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven.indexer%22%20AND%20a%3A%22indexer-cli%22
2、下載索引文件:
http://repo.maven.apache.org/maven2/.index/
下載如下兩個文件:
nexus-maven-repository-index.gz
nexus-maven-repository-index.properties
5.2、倉庫類型
有三大類型:proxy、group、hosted
各個倉庫的介紹:
- Group:分組倉庫
- Hosted:私有倉庫,專門用於存儲我們自己內部生成的jar文件
- 3rd party:第三方倉庫
- Snapshots:本地項目的快照倉庫
- Releases:本地項目發佈的正式版本
- Proxy:公網發佈的jar 例如:spring\mysql driver\struts等
- Central:中央倉庫
- Apache Snapshots:Apache 快照倉庫
5.3、本地項目配置私服,進行下載jar包
在setting.xml裏添加如下配置:
<mirrors>
<mirror>
<id>nexusSnapshot</id>
<name>nexus</name>
<url>http://192.168.237.128:8081/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
以及:
<profile>
<id>common</id>
<repositories>
<repository>
<id>nexusSnapshot</id>
<name>snapshots</name>
<url>http://*</url>
</repository>
<repository>
<id>nexusCentral</id>
<name>nexusCentral/</name>
<url>http://*</url>
</repository>
<repository>
<id>nexusReleases</id>
<name>nexusReleases</name>
<url>http://*</url>
</repository>
</repositories>
</profile>
如下圖:
其中mirrorOf的值是*,表明只能從私服下載,如果私服關閉還允許從中央倉庫下載,則*改爲對應的站點即可,如改爲nexusSnapshot;
如改爲如下配置:
其中,url地址複製即可:
5.4、上傳jar包到私服
1、在pom.xml裏添加如下配置
<distributionManagement>
<repository>
<name>nexusSnapshot</name>
<id>nexusSnapshot</id>
<url>http://192.168.237.128:8081/repository/maven-snapshots/</url>
</repository>
</distributionManagement>
2、在setting.xml裏配置用戶名密碼
<server>
<id>nexusSnapshot</id>
<username>admin123</username>
<password>admin123</password>
</server>
3、然後執行deploy命令即可上傳
在nexus後臺搜索相關jar:
5.5、maven插件的使用
5.5.1、將源碼打爲jar包的插件
訪問:http://maven.apache.org/,點擊左側插件鏈接
ctrl+F搜索source插件,點擊進去
裏邊會介紹該插件的用法:
點擊上邊的usage page:
項目裏使用該插件,pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.1.0</version>
<!--要執行的指令-->
<executions>
<execution>
<id>attach-sources</id>
<!--生命週期,即什麼時候-->
<phase>verify</phase>
<!--具體執行的目標,即幹什麼事情-->
<goals>
<goal>jar-no-fork</goal>
</goals>
<!--需要的配置-->
<!-- <configuration></configuration>-->
</execution>
</executions>
</plugin>
</plugins>
</build>
然後執行install命令或package命令,即可打出源碼包:
5.5.2、設置JRE編譯版本的插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
5.5.3、將項目裏的jar包全部打包爲rar文件
1、點擊maven插件
2、找到RAR插件
3、
4、將下邊的插件複製到pom.xml裏
注意:上邊提示需要執行mvn rar:rar命令,才能最終打出rar包
5、pom.xml:
6、執行mvn rar:rar命令打包
將這個rar文件複製出來,可以看到裏邊的文件都是jar文件
上邊的配置方式。需要執行mvn rar:rar命令才能打爲rar包,插件配置成下邊的形式,直接執行install命令就可打爲rar包:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-rar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeJar>false</includeJar>
</configuration>
<executions>
<execution>
<id>buildRar</id>
<phase>verify</phase>
<goals>
<goal>rar</goal>
</goals>
</execution>
</executions>
</plugin>
5.6、maven生命週期
生命週期 lifecycle
clean lifecycle : 構建前的清理工作
• pre-clean 執行一些需要在clean之前完成的工作
• clean 移除所有上一次構建生成的文件
• post-clean 執行一些需要在clean之後立刻完成的工作
Default lifecycle: 構建的核心部分,編譯、打包、部署、上傳
• validate 項目及所必須的環境驗證
• initialize 初始化構建狀態,例如設置屬性或創建目錄。
• generate-sources 生成次源包
• process-sources
• generate-resources
• process-resources 複製並處理資源文件,至目標目錄,準備打包。
• compile 編譯項目的源代碼。
• process-classes
• generate-test-sources
• process-test-sources
• generate-test-resources
• process-test-resources 複製並處理資源文件,至目標測試目錄。
• test-compile 編譯測試源代碼。
• process-test-classes
• test 使用合適的單元測試框架運行測試。這些測試代碼不會被打包或部署。
• prepare-package
• package 接受編譯好的代碼,打包成可發佈的格式,如 JAR 。
• pre-integration-test
• integration-test
• post-integration-test
• verify
• install 將包安裝至本地倉庫,以讓其它項目依賴。
• deploy 將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享。
執行下邊的命令時,上邊的就會自動執行,如執行install時,compile 就會自動執行(install以上的所有命令都會執行)
site lifecycle:項目報告生成,站點文檔生成
• pre-site 執行一些需要在生成站點文檔之前完成的工作
• site 生成項目的站點文檔
• post-site 執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備
• site-deploy 將生成的站點文檔部署到特定的服務器上
生命週期官網:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html