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