自動生成されたhibernate.cfg.xmlファイル内の.hbm.xmlファイルをパッケージパスでマッピングする前にMavenを強制する方法を教えてもらえますか?
私の一般的な考え方は、mavenを介してhibernate-toolsを使用して、アプリケーションの永続性レイヤーを生成したいということです。したがって、hibernate.cfg.xmlが必要であり、次にすべてのmy_table_names.hbm.xmlが必要であり、最後にPOJOが生成されます。それでも、*。hbm.xmlファイルをhbm2Java
フォルダーに配置すると、src/main/resources/package/path/
ゴールは機能しませんが、hbm2cfgxml
は、テーブル名のみでマッピングファイルを指定します。
<mapping resource="MyTableName.hbm.xml" />
したがって、大きな問題は、hibernate.cfg.xmlが次のようになるようにhbm2cfgxml
を構成するにはどうすればよいかということです。
<mapping resource="package/path/MyTableName.hbm.xml" />
私のpom.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>
そして2番目の質問:hbm2Java
を実行する前にリソースをターゲットフォルダーにコピーするようにmavenに指示する方法はありますか?現時点で使用しています
mvn clean resources:resources generate-sources
そのためですが、もっと良い方法があるはずです。
助けてくれてありがとう。
更新:
@ Pascal:ご協力ありがとうございます。マッピングへのパスは現在正常に機能していますが、以前は何が悪かったのかわかりません。データベース構成の読み取り中にhibernate.cfg.xmlへの書き込みに問題がある可能性があります(ファイルは更新されますが)。
ファイルhibernate.cfg.xmlを削除し、database.propertiesに置き換えて、目標hbm2cfgxml
およびhbm2hbmxml
を実行しました。また、これらの目標ではoutputDirectory
もconfigurationfile
も使用しなくなりました。
その結果、ファイルhibernate.cfg.xml
とすべての*.hbm.xml
が、デフォルト値であるtarget/hibernate3/generate-mappings /フォルダーに生成されます。次に、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
どうすれば対処できますか?もちろん、私は追加することができます:
<outputDirectory>src/main/resources/package/name</outputDirectory>
hbm2hbmxml
の目標に向かっていますが、これは最善のアプローチではないと思いますか? all生成されたコードとリソースをsrc/
フォルダーから遠ざける方法はありますか?
このアプローチの目標は、src/main/Javaまたは/ resourcesフォルダーにソースを生成することではなく、生成されたコードをターゲットフォルダーに保持することだと思います。私はこの観点に概ね同意しているので、最終的にはhbm2dao
を実行し、ビジネス層から生成された永続層コンポーネントとして使用するプロジェクトをパッケージ化することを継続したいと思います。これもあなたが意味したことですか?
hibernate.cfg.xmlが以下のようになるようにhbm2cfgxmlを構成するにはどうすればよいですか(...)
hbm2cfgxml
を使用しているプロジェクトがあり、<mapping resource="..."/>
エントリはhbm.xml
へのパスのパッケージ名を反映しています。ですから、明らかにあなたの側に何か問題があります。ここにいくつかの注意があります:
hbm2cfgxml
フェーズでgenerate-resources
をバインドします。ソースを生成していませんsrc/main/resources
ではなくtarget/classses
でファイルを生成します(生成されたものをソースツリーに配置するのはなぜですか。clean
でファイルをクリーンアップする必要があります)。configurationfile
であり、configurationFile
ではありませんが...<configurationfile>
の構成にhbm2cfgxml
があるのはなぜですか?ここで生成したい...削除します。更新:データベースに接続するために必要な情報をsrc/main/resources/database.properties
(これは propertyfile
property)、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
ファイルを削除し、それを生成したいと思います。
hbm2javaを実行する前にリソースをターゲットフォルダーにコピーするようにmavenに指示する方法はありますか? (...)
hbm2Java
目標それ自体を実行する前にライフサイクルフェーズのプロセスリソースの実行を呼び出します(ドキュメントから)。これがデフォルトの動作であり、hibernate3:hbm2Java
またはgenerate-sources
ifhbm2Java
がバインドされている場合に発生します。
OK、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/generate-mappings(生成された場所)からコピーする必要があります。デフォルトでは)totarget/classes/package/name(hibernate-toolsがそれらを検索します)が、私の場合はそうではありません(これは私が何か間違ったことをしていることを示します)。ですから、私が間違っているのかもしれないことを知っている人がいたら、教えてください。それ以外の場合はそれで十分です。
動作していないことが1つあります。生成されたPOJOとDAOでパッケージ名が使用されていません。しかし、このために別のスレッドを作成しました ここ 。
更新:わかりました、今やっと入手しました。パッケージ名が欠落している問題は、hbm2hbmxml
ゴールの構成にありました。 componentPropertiesとpackagenameが欠落しているため、生成されたhbm.xml
は完全に分類されたクラス名を欠落していました。上記のpomを更新しましたが、正常に動作します。ただし、hbm.xml
ファイルをtarget/classesフォルダーに明示的にコピーすることに関する問題は依然として当てはまります。
Hibernate3-maven-plugin check この投稿 を使用せずに、MavenでHibernateツールを使用する方法の例については。アイデアは、MavenでHibernateツールのAntタスクを実行することです。このアプローチにより、プロセスを完全に制御できます。