感谢this question,我设法使用了 Gradle 的 Hibernate 工具。
事实证明(我不知道)Gradle 确实能够调用 Ant 任务,因此可以使用预先存在的 Hibernate Tools Ant 任务对数据库进行逆向工程。
为此,需要有一个hibernate.cfg.xml 文件,其中包含告诉Ant 询问如何访问我们的数据库所需的配置。这是一个例子:
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/mydb
</property>
<property name="hibernate.connection.username">
username
</property>
<property name="hibernate.connection.password">
password
</property>
</session-factory>
</hibernate-configuration>
(IntelliJ 可能会抱怨这个文件,告诉它找不到驱动程序,但这没关系,因为它们将在执行期间由 Gradle 提供)
这个配置文件将被从 Gradle 调用的 Ant 任务使用。我把它放在一个新的db 文件夹中,在项目根目录中创建。
build.gradle文件需要添加以下内容:
configurations {
reverseMap
}
dependencies {
//...your other dependencies...
reverseMap 'org.hibernate:hibernate-core:4.0.1.Final'
reverseMap 'org.hibernate:hibernate-tools:4.0.1.Final'
reverseMap 'org.slf4j:slf4j-simple:1.7.5'
reverseMap 'mysql:mysql-connector-java:5.1.48'
}
project.ext {
hibernateDestDir = file("$projectDir/src/main/java")
}
task reverseMap {
outputs.dir hibernateDestDir
doLast {
hibernateDestDir.exists() || hibernateDestDir.mkdirs()
ant {
taskdef(
name: 'hibernatetool',
classname: 'org.hibernate.tool.ant.HibernateToolTask',
classpath: configurations.reverseMap.asPath
)
hibernatetool(destdir: hibernateDestDir) {
jdbcconfiguration(
configurationfile: "$projectDir/db/hibernate.cfg.xml",
packagename: "com.me.models"
)
hbm2java(
jdk5: true,
ejb3: true
)
}
}
}
}
此代码创建了一个名为reverseMap 的新配置,可用于声明reverseMap 任务所需的依赖项(需要hibernate-core、hibernate-tools 和log4j,而驱动程序应该是您的 DBMS 需要一个)。
reverseMap 代码调用 Ant 任务,基本遵循the official guide。感兴趣的部分是hbm2java,它是实际的出口商。其余代码基本上是 Ant 任务和配置的胶水代码。
可以从命令行 (./gradlew reverseMap) 或 IntelliJ 调用 Gradle 任务。