2015-06-29 65 views
4

我想擴展StringasType方法來處理LocalDateTime。我知道如何覆蓋這個方法,但是我不知道我應該把它放到項目結構的全局工作位置 - 用於我的項目中的所有字符串。將類似的擴展放在類路徑中的任何位置是否足夠?我知道有一個特殊的擴展公約(META-INF/services),它是如何工作的方法重寫?Groovy - 擴展結構

回答

2

關於此主題的所有文檔可在here找到。和here恰恰相關的部分可以找到。

模塊擴展和模塊描述

對Groovy是能夠加載你的擴展方法,你必須聲明 您的擴展的輔助類。您必須創建一個名爲 org.codehaus.groovy.runtime.ExtensionModule到META-INF文件/服務 目錄:

爲 規格

org.codehaus.groovy.runtime.ExtensionModule MODULENAME =測試模塊的ModuleVersion = 1.0-測試 extensionClasses = support.MaxRetriesExtension staticExtensionClasses = support.StaticStringExtension模塊 描述符需要4個按鍵:

MODULENAME:你的模塊

的ModuleVersion的名字:您的模塊的版本。請注意,版本號爲 僅用於檢查是否不在兩個不同版本的 中加載相同的模塊。

extensionClasses:擴展助手類的列表,例如 方法。您可以提供幾個班級,因爲它們是以逗號分隔的 。

staticExtensionClasses: 靜態方法的擴展助手類的列表。你可以提供幾個班級,因爲他們是用逗號分隔的 。

請注意,模塊不需要定義靜態 幫助程序和實例助手,並且您可以將多個類添加到單個模塊的 。您還可以在一個單一的 模塊中擴展不同的類,而不會出現問題。甚至可以在單個擴展類中使用不同的類 ,但推薦將擴展 方法按功能集分組。

模塊擴展和CLASSPATH

值得一提的是,你不能用它在 使用它編譯同一時間碼的延伸。這意味着要使用擴展 ,它必須在編譯類的類路徑上可用,然後 代碼才能被編譯。通常,這意味着您不能將 測試類放在與擴展類 本身相同的源單元中。由於一般情況下,測試源與正常源分離,並在構建的另一個步驟中執行,這不是 問題。