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。