《Maven官方指南》Maven 類載入指南
原文連結 譯者:carvendy
Maven 類載入指南
這裡描述的類載入是Maven版本在 2.0.6以上的。
概述
- System Classloader
- Core Classloader
- Plugin Classloaders
- Custom Classloaders
1. System Classloader
當我們建立類載入器時,Maven 使用Classworlds 作為類載入框架。在**${maven.home}/boot**目錄你會看到一個jar,一個Classworlds用來製作類載入圖的jar。 Classworlds jar包是java CLASSPATH的唯一節點和Classworlds在Classworlds技術中構建其他類載入器和領域。
一個Ant指令碼將展示系統載入器的內容:
<target name="info">
<echo>java.class.path=${java.class.path}</echo>
</target>
2. Core Classloader
第二個類載入器下的圖包含Maven的核心需求。更為準確地說,核心類載入器在**${maven.home}/lib**已經有類庫了。一般來說這就是Maven的類庫,例子:例項 MavenProject 屬於這類載入器。我們希望在未來進一步為Maven api和系統在執行時可以選擇的實現類。
你可以給類載入器加節點通過
3. Plugin Classloaders
在這以後,每一個外掛有自己的類載入器即Maven核心的類載入器的一個子類。這些類是從類載入器找到外掛的依賴關係列表。
使用者可以新增依賴關係到這個類載入器,通過在他們的專案pom.xml中增加一個外掛的依賴關係到**plugins/plugin**。這裡是增加一個 ant-nodeps 到 Antrun外掛的類載入器和有可能使用 使用附加/可選的Ant任務:
<plugin>
<groupId >org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
...
</plugin>
外掛可以檢查執行時有效的類路徑通過 **${plugin.artifacts}**或 ${plugin.artifactMap}的表達會有一個list或map,分別地,解決注射工件來自於PluginDescriptor。
請用筆記外掛類載入器既不包含專案的依賴關係也不包含它構建輸出。相反,外掛可以查詢專案編譯,執行和測試時候可以結合來自**Mojo API Specification的mojo註解requiresDependencyResolution**獲取類檔案路徑。例如,設定一個mojo執行的 @requiresDependencyResolution可以查詢執行時的專案類路徑當它可以建立更多的類裝載器。
當一個構建外掛被執行,這個執行緒容器類載入器會被設定到外掛載入器。
自定義類載入器
外掛可以自由地建立更多類載入器在它們自己的判斷下。作為一個例子,一個外掛可以建立一個繫結外掛類路徑和專案類路徑的類載入器。
重要的是理解外掛類載入器不能從任何自定義的類載入器中載入類。有些工廠模式需要。這裡你必須在外掛的類載入器展示之前將入類加入到它(外掛的類載入器)中。