Java 渐变:扩展现有类型的DLL
我想向现有类型添加一个函数,在我的例子中,这是Java 渐变:扩展现有类型的DLL,java,c++,gradle,dsl,Java,C++,Gradle,Dsl,我想向现有类型添加一个函数,在我的例子中,这是NativeLibrarySpec 我试过了,它已经开始工作了,但现在我想对它进行推广,使它能够像使用NativeLibrarySpec的DSL的标准功能一样使用它。 问题是,我只能在配置实例(包含我的函数的块)之后才能访问该实例,因此它失败了,因为它试图在我能够链接它之前调用specialConfig 下面是代码(不要在意这个示例是针对本机软件C++): 这里是另一个例子,但它只适用于项目* 你能试试这个吗 plugins { id 'cp
NativeLibrarySpec
我试过了,它已经开始工作了,但现在我想对它进行推广,使它能够像使用NativeLibrarySpec
的DSL的标准功能一样使用它。
问题是,我只能在配置实例(包含我的函数的块)之后才能访问该实例,因此它失败了,因为它试图在我能够链接它之前调用specialConfig
下面是代码(不要在意这个示例是针对本机软件C++):
这里是另一个例子,但它只适用于项目*
你能试试这个吗
plugins {
id 'cpp'
}
class SpecialConfig {
// no need to pass this to the constructor we can just make it a
// method arg instead
SpecialConfig() {
}
// manipulate spec as desired
def something(NativeComponentSpec spec, boolean enabled) {
println "Hello something!"
spec.sources {
cpp {
// Some important stuffs
}
}
}
}
// add your extension earlier
project.extensions.create('specialConfig', SpecialConfig)
model {
components {
main(NativeLibrarySpec) { mySpec ->
// we can call our extension via the project
project.specialConfig { config ->
// our closure is handed an instance of the class
// on that we can call methods
config.something(mySpec, true)
}
// or more simply we could make it a one liner
project.specialConfig.something(mySpec, true)
}
}
}
产出:
$ gradle build
Configuration on demand is an incubating feature.
Hello something!
:linkMainSharedLibrary UP-TO-DATE
:mainSharedLibrary UP-TO-DATE
:createMainStaticLibrary UP-TO-DATE
:mainStaticLibrary UP-TO-DATE
:assemble UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE
BUILD SUCCESSFUL
Total time: 1.104 secs
感谢您的时间:)不幸的是,我正在寻找一种不需要传递任何参数的方法,代码应该看起来很流畅
$ gradle build
Configuration on demand is an incubating feature.
Hello something!
:linkMainSharedLibrary UP-TO-DATE
:mainSharedLibrary UP-TO-DATE
:createMainStaticLibrary UP-TO-DATE
:mainStaticLibrary UP-TO-DATE
:assemble UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE
BUILD SUCCESSFUL
Total time: 1.104 secs