Сначала вы создаете приложение командной строки, которое обрабатывает экспорт. Обратите внимание, что 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.