Сначала вы создаете приложение командной строки, которое обрабатывает экспорт. Обратите внимание, что Ejb3Configuration устарела, но не рекомендуется для внешнего использования — hibernate использует его внутри довольно часто. Так что это правильно работающий класс:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
@SuppressWarnings('deprecation')public class JpaSchemaExport { public static void main(String[] args) throws IOException { execute(args[0], args[1], Boolean.parseBoolean(args[2]), Boolean.parseBoolean(args[3])); } public static void execute(String persistenceUnitName, String destination, boolean create, boolean format) { System.out.println('Starting schema export'); Ejb3Configuration cfg = new Ejb3Configuration().configure(persistenceUnitName, new Properties()); Configuration hbmcfg = cfg.getHibernateConfiguration(); SchemaExport schemaExport = new SchemaExport(hbmcfg); schemaExport.setOutputFile(destination); schemaExport.setFormat(format); schemaExport.execute(true, false, false, create); System.out.println('Schema exported to ' + destination); }} |
Обратите внимание, что мы не развертываем файл напрямую в целевой базе данных. (2-й аргумент для .execute — false). Это потому, что у нас нет свойств подключения к базе данных в persistence.xml — они внешние. Развертывание файла схемы выполняется позже в сборке maven, но это выходит за рамки этого поста.
Затем мы должны просто вызвать этот класс из сборки maven. Сначала я попытался создать его как задачу ant и запустить с помощью плагина antrun, но у него есть проблемы с classpath и загрузчиком классов (не находит сущности и persistence.xml). Вот почему я использовал exec-maven-plugin, который вызывает приложение в той же JVM, что и сборка:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <phase>${sql.generation.phase}</phase> <!-- this is process-classes in our case currently --> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.yourcompany.util.JpaSchemaExport</mainClass> <arguments> <argument>core</argument> <argument>${project.build.directory}/classes/schema.sql</argument> <argument>true</argument> <argument>true</argument> </arguments> </configuration></plugin> |
Затем вы можете использовать sql-maven-plugin для развертывания файла schema.sql в целевой базе данных (вам понадобится загрузить внешние свойства db, загруженные maven, что делается с помощью свойства-maven-plugin).
Ссылка: Как сгенерировать сценарий создания схемы с Hibernate 4, JPA и Maven от нашего партнера JCG Божидара Божанова в техническом блоге Bozho.