2016-02-12 112 views
2

我希望能夠在離線狀態下從Maven原型啓動項目。但是我無法找到有關如何緩存Maven原型以供脫機使用的明確說明。有人有建議嗎?Maven Archetypes的離線緩存

回答

3

Maven原型畢竟是一個神器,因此它將在Maven第一次使用時自動緩存。以後的使用將始終運行提取的工件(從本地緩存)。我們也可以強制Maven只使用緩存(離線模式,如下所述)。

因此,您可以簡單地調用相關原型一次(即爲一個虛擬項目),並讓它們脫機進一步調用。

如果您確實想要預先緩存它,可以使用Maven Dependency Plugin及其get目標將原型工件添加到本地Maven緩存中。

例如,讓我們緩存Maven Quickstart Archetype如下:

mvn dependency:get -DgroupId=org.apache.maven.archetypes \ 
    -DartifactId=maven-archetype-quickstart -Dversion=1.0 

它會因此對你的本地Maven緩存maven-archetype-quickstart-1.0.jar神器存儲。

如果你不知道你的本地Maven緩存,您可以使用Maven Help Plugin並運行:

mvn help:evaluate -Dexpression=settings.localRepository 

由於詳細輸出的一部分,你會得到的完整路徑本地Maven緩存。

由於現在的快速啓動原型是我們的緩存,我們可以使用-o標誌(下線,強制)爲Maven的調用

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes \ 
    -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.0 \ 
    -DgroupId=com.sample -DartifactId=test -Dversion=1.0-SNAPSHOT -B -o 

這樣運行它,Maven將運行脫機執行並只使用其本地緩存。


注意,你也可以使用archetypeCatalog選項,同時調用archetype:generate並將其設置爲local只檢查本地目錄,但強制執行,以離線模式(-o)將更好地滿足您的需要(迫使本地目錄和本地緩存的原型)。

1

Maven的原型機制依賴於目錄。目錄是maven檢查可用的原型的XML文件。 如Chapter 12.4Maven: The complete reference狀態:

原型目錄是一個XML文件,該文件Maven Archetype插件可以諮詢以定位在儲存庫中的原型。

通過抓取本地存儲庫中的可用原型,可以創建緩存原型的類別(已下載)。這是通過調用crawl mojo

mvn archetype:crawl

這將在~/.m2/repository/archetype-catalog.xml創建一個XML文件。

一旦創建(你可以通過附加-Dcatalog=<filename>指定路徑),你可以使用命令

mvn archetype:generate -DarchetypeCatalog=file://<fullpath of catalog file> 

例如

mvn archetype:generate -DarchetypeCatalog=file:///home/username/.m2/repository/archetype-catalog.xml 

使用新創建的目錄生成項目。它會只有顯示可用(緩存)的原型給你,這些可以離線使用。

附錄:

我猜你會使用MVN原型:產生更多的時候,所以你可能想以此來最大限度地減少打字:

1)生成.m2/archetype-catalog.xml下的XML原型目錄 -

mvn archetype:crawl -Dcatalog=/home/<username>/.m2/archetype-catalog.xml 

2)使用MVN原型:生成-DarchetypeCatalog =本地(此訪問.m2/archetype-catalog.xml

mvn archetype:generate -DarchetypeCatalog=local 

這是一個好主意,一旦在線使用它,以便下載所有必要的插件。例如,Archetype Plugin和潛在的其他人。

+1

但是該目錄將只提供已經被緩存的內容,而問題更多的是關於如何緩存原型的前端。此外,如果原型已經被緩存,實際上不需要重新創建本地目錄。無論如何,好的一點就是提及它。 –