1. 程式人生 > >【maven之四】 --maven倉庫和常用命令

【maven之四】 --maven倉庫和常用命令

    這幾天專案開發中,經常會出現jar當不下來,jboss起不來的時候,所以經常做的動作就是clean專案,instal專案,project clean專案,但是對於這些操作,進一步的理解又說不出來。所以就查了一下這幾個命令到底是幹嘛的,要理解這幾個命令,還得從maven 的倉局機制和宣告週期說起。

一、Maven倉庫

 1,maven倉庫原理

    Maven倉庫是基於簡單檔案系統儲存的,只要在檔案系統中沒有發現相關的檔案,說明這幾種依賴並不存在,因此我們很容易在本地倉庫查詢具體的依賴是否存在。

2,倉庫的分類

         

如上圖所示,Maven的倉庫分為本地倉庫和遠端倉庫。遠端倉庫又包括中央倉庫,私服,其他公共庫,我們常用就是中央倉庫和私服。

 1)本地倉庫

  就是我悶自己電腦上的檔案,所以他是唯一的,專案構建時候首先在本地倉庫查詢依賴,如果本地沒有依賴時,才會去尋找遠端倉庫。

本地倉庫的配置和存放配置過程:

a. 解壓maven安裝包到D盤根目錄。
b. Eclipse—windows-Perferences—Maven-Installations—add-installation type 選擇maven安裝目錄。在Installations中選擇新配置的maven選項。

c. Eclipse—windows-Perferences—Maven—User Settings
點選Restore Defaults,沒有反應但是會在C:\Users\${User}\.m2\路徑下生成settings.xml檔案。
d.開啟資源管理器,找到C:\Users\${User}\.m2目錄下的settings.xml,修改內容為自己需要配置的本地倉庫、私服、遠端倉庫的地址連結,儲存並關閉User Settings視窗。

usr Setting 中的主要內容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

	<!-- 設定本地倉庫路徑 -->
	<localRepository>D:\needforjava\maven\repository</localRepository>

	<!-- 設定釋出 jar 包時的使用者名稱及密 -->
	<servers>
		<server>
			<id>releases</id>
			<username>***</username>
			<password>****</password>
		</server>

		<server>
			<id>snapshots</id>
			<username>****</username>
			<password>****</password>
		</server>		
	</servers>

	<!-- 設定 maven 的遠端倉庫為 nexus -->
	<mirrors>
		<mirror>
			<id>nexus</id>
			<mirrorOf>central</mirrorOf>
			<name>nexus repository</name>
			<url>http://192.168.********</url>
		</mirror>
	</mirrors>
	<!-- 設定 central 的路徑等 -->
	<profiles>
		<profile>
			<id>central</id>
			<repositories>
				<repository>
					<id>central</id>
					<name>Central</name>
					<url>http://******</url>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>central</id>
					<name>Central</name>
					<url>http://*******</url>
				</pluginRepository>
			</pluginRepositories>
		</profile> 
	</profiles>

	<activeProfiles> 

		<activeProfile>central</activeProfile>
	</activeProfiles>

	<!-- 配置eclipse外掛 -->
	<pluginGroups>
		<pluginGroup>org.mortbay.jetty</pluginGroup>	
		<pluginGroup>org.codehaus.cargo</pluginGroup>
		<pluginGroup>org.jvnet.hudson.tools</pluginGroup>
	</pluginGroups>

</settings>

e.再次進入 Eclipse—windows-Perferences—Maven—User Settings

Global Settings選擇maven 安裝目錄下conf資料夾下的settings.xml

檢查Local Repository 項,如果為D:/maven/repository則配置成功,否則重新配置上一步。

 

2)遠端倉庫

    指的是非本地的所有其他倉庫,中央倉庫和私服都是遠端倉庫的一種,如果本地倉庫沒有專案構建需要的jar包,專案會自從從遠端下載,如果遠端倉庫也沒有,專案就會報錯。中央倉庫是預設的遠端倉庫,Maven安裝檔案自帶遠端倉庫的位置是:http://repo.maven.apache.org/maven2

3)遠端倉庫---私服

    私服是一種特殊的遠端倉庫,它 是架設在區域網內的倉庫服務,服務程式碼廣域網上的遠端倉庫,供區域網內的Maven使用者使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在構件,則從外部的遠端倉庫下載,同時快取在私服上,然後為Maven下載請求提供服務。另外,對於第三方的jar無法從倉庫下載(jebc驅動)可以從本地上傳到私服供客戶端下載。

  優點如下:①節省外網的寬頻。②加速Maven構建 ③部署第三方構件 ④提高穩定性,增強控制,因為內網相對外網來說,一般比較穩定。⑤降低中央倉庫的負荷 ,原因是中央倉庫的訪問量太大。

                   


第二部分:maven命令

1,update Project(Alt+F5)

    本身是更新專案的意思,因為你的工程是一個Maven工程,你的工程做了一些修改之後,必須讓Maven重新生成或修改相關檔案。否則Ecplise將不知道變化。(當然也可以手動修改,讓它知道,但是這樣不推薦。)例如:①用在maven中是指pom.xml檔案改動之後,需要執行Maven、Update Project來更新外部依賴的jar包。

對比:svn的update與Maven的updtae Project作用有什麼不同?

SVN update只是更新專案的svn倉庫。

maven update project則是進行一系列的操作。具體跟自己的配置有關,可能包含以下操作,更新SVN、更新專案關聯、編譯專案、構建釋出等。如果jar包都是放在專案中,不是通過Maven管理,那麼svn update時就取下來了。如果是用Maven倉庫統一管理所有的jar包,那麼是通過Maven update來獲取。一般情況下,pom.xml修改之後,Maven會自動執行專案的Update。

2,maven install

   打包並且安裝到本地倉庫,此時本地倉庫會新增maven-quickstart-1.0-SNAPSHOT.jar檔案。

   相關的命令:

    mvn complile 編譯專案。

    maven package:打包,此時target目錄下回出現Maven-quickstart-1.0-SNAPSHOT.jar檔案。即為打包後的檔案。

3, eaplise -project - clean

                     

   ①,在ecplise的project選單下面有一個build automatically.選中這個的話,每次在儲存一會就會自動編譯。

   ②,ecplise--->project--->clean...選項將工程中的.class檔案刪除,同時編譯工程,類似於jbuild的rebuild。

由於ecplise的編譯是基於時間戳的判斷機制的。因此當用戶按build all的時候有些ecplise認為時間撮沒有改變的類不會被編譯。因此需要先clean 一下再編譯。這個時候,ecplise會將所有的以前編譯資訊清除然後編譯。

小結:

    每次看都會覺得理解多了一點點,多學習幾遍理解就深刻了。為什麼有些東西總覺得理解不透,應該自己重複學習的次數少。