Мне удалось использовать Hibernate Tools из Gradle, во многом благодаря этот вопрос.
Оказывается (я этого не знал), 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 во время выполнения)
Этот файл конфигурации будет использоваться задачей Ant, вызываемой из Gradle. Я положил его в новую папку 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
, а драйвер должен быть тем, который нужен для вашей СУБД).
Код reverseMap
вызывает задачу Ant, в основном следуя официальному руководство. Интерес представляет hbm2java
, фактический экспортер. Остальной код в основном представляет собой связующий код для задачи и конфигурации Ant.
Задачу Gradle можно вызвать либо из командной строки (./gradlew reverseMap
), либо из IntelliJ.
person
gscaparrotti
schedule
10.02.2021