Как настроить hibernate-tools с maven для создания hibernate.контекстно-свободная грамматика.XML.* ,hbm.xml, POJOs и DAOs
может ли кто-нибудь сказать мне, как заставить maven предшествовать отображению .hbm.xml-файлы в автоматически сгенерированном спящем режиме.контекстно-свободная грамматика.xml-файл с путем пакета?
моя общая идея заключается в том, что я хотел бы использовать hibernate-tools через maven для создания слоя персистентности для моего приложения. Так что мне нужна спячка.контекстно-свободная грамматика.xml, затем все my_table_names.hbm.xml и в конце генерируется POJO. И все же ... --7--> цель не будет работать, как я положил *.hbm.xml-файлы в но hbm2cfgxml
указывает файлы сопоставления только по имени таблицы, т. е.:
<mapping resource="MyTableName.hbm.xml" />
Итак, главный вопрос: как я могу настроить hbm2cfgxml
так что спящий режим.контекстно-свободная грамматика.xml выглядит следующим образом:
<mapping resource="package/path/MyTableName.hbm.xml" />
мой пом.xml выглядит так на данный момент:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>hbm2cfgxml</id>
<phase>generate-sources</phase>
<goals>
<goal>hbm2cfgxml</goal>
</goals>
<inherited>false</inherited>
<configuration>
<components>
<component>
<name>hbm2cfgxml</name>
<implemetation>jdbcconfiguration</implementation>
<outputDirectory>src/main/resources/</outputDirectory>
</component>
</components>
<componentProperties>
<packagename>package.path</packageName>
<configurationFile>src/main/resources/hibernate.cfg.xml</configurationFile>
</componentProperties>
</configuration>
</execution>
</executions>
</plugin>
а затем второй вопрос: есть ли способ сказать maven скопировать ресурсы в целевую папку перед выполнением hbm2java
? На данный момент я использую
mvn clean resources:resources generate-sources
для этого, но должно быть лучше путь.
Спасибо за любую помощь.
обновление:
@Pascal: Спасибо за помощь. Путь к отображениям теперь работает отлично, хотя я не знаю, что было не так раньше. Может быть, есть какая-то проблема с записью в спящий режим.контекстно-свободная грамматика.xml при чтении конфигурации базы данных из нее (хотя файл обновляется).
я удалил файл hibernate.контекстно-свободная грамматика.xml, заменил его базой данных.свойства и запустить цели hbm2cfgxml
и hbm2hbmxml
. Я также не использую outputDirectory
, ни configurationfile
в этих целях больше.
в результате файлы hibernate.cfg.xml
и *.hbm.xml
генерируются в мою целевую/hibernate3/ сгенерированную-сопоставления / папку, которая является значением по умолчанию. Затем я обновил hbm2java
цель следующим образом:
<componentProperties>
<packagename>package.name</packagename>
<configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>
но тогда я получаю следующее:
[INFO] --- hibernate3-maven-plugin:2.2:hbm2java (hbm2java) @ project.persistence ---
[INFO] using configuration task.
[INFO] Configuration XML file loaded: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml
12:15:17,484 INFO org.hibernate.cfg.Configuration - configuring from url: file:/C:/Documents%20and%20Settings/mmm/workspace/project.persistence/target/hibernate3/generated-mappings/hibernate.cfg.xml
12:15:19,046 INFO org.hibernate.cfg.Configuration - Reading mappings from resource : package.name/Messages.hbm.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java (hbm2java) on project project.persistence: Execution hbm2java of goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2java failed: resource: package/name/Messages.hbm.xml not found
как мне с этим справиться? Конечно, я мог бы добавить:--23-->
<outputDirectory>src/main/resources/package/name</outputDirectory>
до hbm2hbmxml
цель, но я думаю, что это не лучший подход, или нет? Есть ли способ сохранить все сгенерированный код и ресурсы вдали от src/
папка?
я предполагаю, что цель этого подхода заключается не в создании каких-либо источников в моей папке src/main/java или /resources, а в сохранении сгенерированного кода в целевой папке. Поскольку я в целом согласен с этой точкой зрения, я хотел бы продолжить это в конечном итоге выполнение hbm2dao
и упаковка проекта для использования в качестве сгенерированный компонент слоя персистентности из бизнес-слоя. Вы это тоже имели в виду?
3 ответов
как я могу настроить hbm2cfgxml так, чтобы спящий режим.контекстно-свободная грамматика.xml выглядит как ниже (...)
у меня есть проект, который использует hbm2cfgxml
и <mapping resource="..."/>
записи отражают имя пакета в пути к hbm.xml
. Так что с вашей стороны явно что-то не так. Вот несколько замечаний:--24-->
- я бы привязала
hbm2cfgxml
наgenerate-resources
фаза, вы не генерируете источники - я бы не создавал файл в
src/main/resources
но вtarget/classses
(почему вы помещаете сгенерированный материал в исходное дерево, вы хотитеclean
чтобы очистить его). - есть опечатка, это
configurationfile
, а неconfigurationFile
но... - Какого черта у вас есть
<configurationfile>
в комплектацииhbm2cfgxml
? Вы хотите создать его здесь... Я бы его убрал.
обновление: вы должны поместить информацию, необходимую для подключения к базе данных в src/main/resources/database.properties
(это значение по умолчанию propertyfile
свойства), а не в src/main/resources/hibernate.cfg.xml
(удалить этот файл). Ниже образца database.properties
:
hibernate.connection.driver_class=org.apache.derby.jdbc.ClientDriver
hibernate.connection.url=jdbc:derby://localhost:1527//home/pascal/Projects/derbyDBs/EMPLDB
hibernate.connection.username=APP
hibernate.connection.password=APP
hibernate.dialect=org.hibernate.dialect.DerbyDialect
и, как я сказал, удалите src/main/resources/hibernate.cfg.xml
файл, вы хотите его сгенерировать.
есть ли способ сказать maven скопировать ресурсы в целевую папку перед выполнением hbm2java? (...)
на hbm2java
цель вызывает выполнение процесса этапа жизненного цикла-ресурсы перед выполнением сам (из документации). Так что это поведение по умолчанию и происходит с hibernate3:hbm2java
или generate-sources
если hbm2java
привязан к нему.
хорошо, я исправил свою проблему, заставив maven поставить hbm.xml
файлы / target/classes/package / name папка, поэтому в конце мой pom выглядит так:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>hbm2cfgxml</id>
<phase>generate-resources</phase>
<goals>
<goal>hbm2cfgxml</goal>
</goals>
<inherited>false</inherited>
<configuration>
<components>
<component>
<name>hbm2cfgxml</name>
<implementation>jdbcconfiguration</implementation>
</component>
</components>
<componentProperties>
<packagename>package.name</packagename>
</componentProperties>
</configuration>
</execution>
<execution>
<id>hbm2hbmxml</id>
<phase>generate-resources</phase>
<goals>
<goal>hbm2hbmxml</goal>
</goals>
<inherited>false</inherited>
<configuration>
<components>
<component>
<name>hbm2hbmxml</name>
<outputDirectory>target/classes</outputDirectory>
</component>
</components>
<componentProperties>
<packagename>package.name</packagename>
</componentProperties>
</configuration>
</execution>
<execution>
<id>hbm2java</id>
<phase>generate-sources</phase>
<goals>
<goal>hbm2java</goal>
</goals>
<inherited>false</inherited>
<configuration>
<components>
<component>
<name>hbm2java</name>
<implementation>configuration</implementation>
</component>
</components>
<componentProperties>
<packagename>package.name</packagename>
<configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>
</configuration>
</execution>
<execution>
<id>hbm2dao</id>
<phase>generate-sources</phase>
<goals>
<goal>hbm2dao</goal>
</goals>
<inherited>false</inherited>
<configuration>
<components>
<component>
<name>hbm2dao</name>
<implementation>configuration</implementation>
</component>
</components>
<componentProperties>
<packagename>package.name</packagename>
<configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.4-701.jdbc3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
и он работает нормально. Как я мог видеть в других сообщениях, на некоторых ранних этапах сборки эти hbm.xml
файлы должны быть скопированы из target/hibernate3 / generated-сопоставления (где они генерируются по умолчанию) в цель/классы/пакет / имя (где hibernate-tools ищет их), но в моем случае это не так (что указывает на то, что я делаю что-то неправильно). Так что если кто-то знает, что я делаю не так, Пожалуйста, скажите мне. Иначе этого будет достаточно.
есть одна вещь, которая не работает: имена пакетов не используются в сгенерированных POJOs и DAOs: но я создал еще один поток для этого здесь.
обновление: хорошо, теперь я наконец понял. Проблема с отсутствующими именами пакетов была в the цели. Я пропустил componentProperties С имя пакета там, так что генерируется hbm.xml
пропущены полностью классифицированные имена классов. Я обновил выше pom, теперь он работает нормально. Проблема, касающаяся явного копирования hbm.xml
файлы целевой/классы папка по-прежнему имеет место, хотя.
для примера о том, как использовать инструменты Hibernate с maven, без использования hibernate3-maven-plugin check этот пост. Идея состоит в том, чтобы запустить Hibernate tools Ant task с Maven. Такой подход дает вам полный контроль над процессом.