2015-10-17 279 views
1

这与this question类似,但我们使用的是Gradle。假设我们直接在我们的构建脚本as canonically described in the docs中使用jOOQ的代码生成。如何在Gradle中使用jOOQ自定义代码生成器策略?

有两个问题。首先,我们将添加一个新的strategy到发电机的配置,这应该是简单的:

// ... 
generator() { 
    // ... 
    strategy() { 
     name('com.example.MyCustomGeneratorStrategy') 
    } 
} 

但是,如果我们println生成的XML配置,name元素神秘省略(默太):

<generator> 
    <!-- ... --> 
    <strategy /> 
</generator> 

其次,可以使用什么机制来预编译生成器策略类(com.example.MyCustomGeneratorStrategy),并让它在构建脚本的类路径中可用?这里可能存在一个折痕:策略代码依赖于jOOQ的codegen模块(也可能有其他依赖关系 - 例如我们的依赖Apache Commons Lang)。

回答

2

第一个问题(name被无声省略)似乎与问题Groovy MarkupBuilder name conflict中所述的问题类似。继答案的建议有,我们可以通过做解决问题#1:

// ... 
generator() { 
    // ... 
    strategy() { 
     delegate.invokeMethod('name', 'com.example.MyCustomGeneratorStrategy') 
    } 
} 

(当然,把一个描述性注释是废话上面,以防止任何未来的胡闹...),其到位, XML配置实际上是正确的:

<strategy> 
    <name>com.example.MyCustomGeneratorStrategy</name> 
</strategy> 

第二个问题(预编译的策略类,并把它放在构建脚本的类路径)是already solved by Gradle:使用特殊buildSrc项目。也就是说,将buildSrc目录放在项目根目录中。成立buildSrc/build.gradle到包括jOOQ代码生成依赖和其他任何你可能需要:

repositories() { 
    mavenCentral() 
} 

dependencies { 
    compile 'org.apache.commons:commons-lang3:+' 
    compile 'org.jooq:jooq-codegen:+' 
} 

然后在buildSrc/src/main/java,你可以把你生成的策略类。因此,代码生成应该是Just Work(Gradle将为您编译buildSrc中的内容)。如果你弄乱了发电机组并且找不到它,jOOQ应该抛出一个ClassNotFoundException

(注:我们正在使用作为jOOQ docs描述的构建脚本配置的其余部分的,如果你从上面的偏离可能不是有用)

+0

你有一个想法,像buildSrc是否存在对于Maven? – jhyot