2016-08-01 20 views
1

我正尝试构建一个简单的Groovy项目,其中包含一个Groovy扩展方法的包。使用Groovy扩展方法构建项目

当我尝试编译项目时,使用扩展方法的类无法找到它。描述符和类是由IDE正确拾取的。

我想问题是扩展方法需要在编译时,它可能还没有被编译。 我试过创建不同的sourceSets但没有成功。

dependencies { 
    compile 'org.codehaus.groovy:groovy:2.4.7' 
    compile 'org.membrane-soa:service-proxy-core:4.2.2' 
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4' 
    extensionCompile 'org.codehaus.groovy:groovy:2.4.7' 
} 

sourceSets { 
    extension { 
     groovy { 
      include '**/ClosureExtension.groovy' 
     } 
    } 
    main { 
     groovy { 
      compileClasspath += extension.output 
     } 
    } 
} 

扩展方法家住的src/main /常规/ COM/predic8 /膜/ DSL /扩展和项目中的src/main /剩下的常规/ COM/predic8 /膜/ DSL /。

P.S .:项目类全部用@CompileStatic注解。

回答

1

一种方法:将扩展代码分离到它自己的项目中,并从该项目生成一个jar。然后,在另一个项目中,DSL代码可以使用该jar并将扩展罐指定为依赖关系

这将是一个巨大的答案,所以我嘲笑它,并将其放在GitHub here(所有到期贷款mrhaki's post)。有两个项目:extensiondsl。假设您了解Gradle中的多项目构建,其实质是来自dsl/build.gradle的这一行:

compileGroovy.dependsOn tasks.getByPath(':extension:jar') 
+0

非常感谢您,看起来像一个很好的方法! – helpermethod