2015-06-29 63 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

值得一提的是,你不能用它在 使用它编译同一时间码的延伸。这意味着要使用扩展 ,它必须在编译类的类路径上可用,然后 代码才能被编译。通常,这意味着您不能将 测试类放在与扩展类 本身相同的源单元中。由于一般情况下,测试源与正常源分离,并在构建的另一个步骤中执行,这不是 问题。