Ebean-ORM enhance with gradle
使用Ebean ORM有个麻烦的地方,就是每次部署app前,需要enhance下entity类的class文件,所谓enhance,就是加强操作,用于修改实体bean,包括”编织“,”转换“,”字节码操作“等过程。如果没有enhance就使用ebean orm,则ebean会抛出异常。Ebean ORM提供了eclipse插件、idea插件、maven插件、ant等解决方案,虽然没有gradle插件支持,不过好在gradle支持ant任务,通过gradle调用ebean提供的ant target,完成编译后自动enhance操作。
示例源码下载
示例项目我已经放到github了,看源码更直观:
https://github.com/ichenkaihua/spring-ebean
gradle调用ant
gradle调用ant的一般步骤是
- 定义一个
configuration配置组,就是一个依赖组,和compile,testCompile一个性质。 - 给
configuration定义依赖,ant运行时需要依赖这些包。 - 使用
ant.taskdef闭包定义一个ant task。 - 定义一个task,调用步骤3定义的ant。
build.gradle文件:
repositories {
mavenCentral()
}
configurations{
ebeanagent
}
dependencies {
ebeanagent 'org.avaje.ebeanorm:avaje-ebeanorm-agent:4.7.1'
}
ant.taskdef(
name: "ebeanEnhance",
classname:"com.avaje.ebean.enhance.ant.AntEnhanceTask",
classpath:configurations.ebeanagent.asPath
)
def ebeanEnhance = {dir, packages ->
println dir
println packages
println '============================================'
println ' Enhance ebean classes....' + dir
println '============================================'
ant.ebeanEnhance(classSource: dir,
packages: packages,
transformArgs: "debug=10")
println 'Enhance ebean end....................'
}
compileJava.doLast {
ebeanEnhance(destinationDir, "com.chenkaihua.springebean.entity.*")
}
这里没有定义task调用ant,而是让compileJava之后enhance,这样就保证了自动enhance,相比idea插件等手动enhance方式,省事多了。
小技巧
使用IDEA付费版时,跑server用idea集成工具,比如tomcat,jetty等,此时按照上述解决办法enhance后还是不能跑,报错为com.xxx.entity.User not enhance?,说明entity没有enhance,解决方法如下:
1.打开run configurations:

2.增加build前的gradle task为’compileJava’



3. 调整顺序:

如果是使用gretty,jetty等插件部署app,则不需要add这个task。