So konfigurieren Sie Hibernate-Tools mit maven hibernate.cfg.xml, * .hbm.xml, POJOs und DAOs zu erzeugen

StackOverflow https://stackoverflow.com/questions/2843949

Frage

kann mir jemand sagen, wie zu zwingen Maven zu precede Mapping .hbm.xml Dateien in der automatisch generierten hibernate.cfg.xml Datei mit Paketpfad?

Meine allgemeine Idee ist, würde Ich mag Hibernate-Tools über Maven verwenden, um die Persistenz-Schicht für meine Anwendung zu erzeugen. Also, ich brauche die hibernate.cfg.xml, dann werden alle my_table_names.hbm.xml und am Ende der POJO des erzeugten. Doch das hbm2java Ziel wird nicht funktionieren, wie ich * .hbm.xml Dateien in den Ordner src/main/resources/package/path/ setzen aber hbm2cfgxml legt die Mapping-Dateien nur von Tabellennamen, das heißt:.

<mapping resource="MyTableName.hbm.xml" />

Die große Frage ist: Wie kann ich konfigurieren hbm2cfgxml so dass hibernate.cfg.xml sieht aus wie folgt:

<mapping resource="package/path/MyTableName.hbm.xml" />

Meine pom.xml wie folgt aussieht im Moment:

<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>

Und dann die zweite Frage: Gibt es eine Möglichkeit, Maven tell Ressourcen in den Zielordner zu kopieren, bevor hbm2java Ausführung? Im Moment bin ich mit

mvn clean resources:resources generate-sources

für das, aber es muss ein besserer Weg geben.

Vielen Dank für jede Hilfe.

Update:

@Pascal: Vielen Dank für Ihre Hilfe. Der Weg zum Mappings funktioniert gut jetzt, ich weiß nicht, was falsch vorher war, though. Vielleicht gibt es einige Probleme zu hibernate.cfg.xml mit dem Schreiben, während von ihm zu lesen Datenbank config (wenn die Datei aktualisiert wird).

Ich habe die Datei hibernate.cfg.xml gelöscht, ersetzt es mit database.properties und die Ziele hbm2cfgxml und hbm2hbmxml laufen. Ich auch nicht mehr die outputDirectory noch configurationfile in diesen Zielen verwendet werden.

Als Ergebnis werden die Dateien hibernate.cfg.xml und alle *.hbm.xml werden mein Ziel / Hibernate3 / erzeugt-Mappings / Ordner generiert in, die der Standardwert ist. Dann aktualisiert ich das hbm2java Ziel mit dem folgenden:

<componentProperties>
    <packagename>package.name</packagename>
    <configurationfile>target/hibernate3/generated-mappings/hibernate.cfg.xml</configurationfile>
</componentProperties>

Aber dann bekomme ich die folgende:

[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

Wie kann ich damit umgehen? Natürlich könnte ich hinzufügen:

<outputDirectory>src/main/resources/package/name</outputDirectory>

zum hbm2hbmxml Ziel, aber ich denke, das ist nicht der beste Ansatz, oder ist es? Gibt es eine Möglichkeit zu halten alle der generierte Code und Ressourcen weg vom src/ Ordner?

Ich gehe davon aus, das Ziel dieses Ansatzes ist es keine Quellen in mein src / main / java oder / Ressourcen-Ordner zu erzeugen, aber den generierten Code in den Zielordner zu halten. Wie ich in der Regel mit dieser Sicht zustimmen, würde Ich mag mit, dass schließlich die Ausführung hbm2dao und Verpacken des Projekts weiterhin als erzeugte Persistenz-Schicht-Komponente aus der Business-Schicht verwendet werden soll. Ist das auch, was Sie gemeint?

War es hilfreich?

Lösung

  

Wie kann ich configure hbm2cfgxml so dass hibernate.cfg.xml sieht aus wie unter (...)

Ich habe ein Projekt, das hbm2cfgxml und die <mapping resource="..."/> Einträge spiegelt das Paket in dem Pfad zum hbm.xml verwendet. So ist es eindeutig etwas falsch auf Ihrer Seite. Hier sind ein paar Bemerkungen:

  • Ich würde hbm2cfgxml auf der generate-resources Phase binden, Sie nicht Quellen
  • Erzeugen
  • Ich würde nicht die Datei in src/main/resources erzeugen, aber in target/classses (warum Sie Sachen im Quellbaum erzeugt Stoßen, wollen Sie ein clean um es zu reinigen).
  • Es ist ein Tippfehler, es ist configurationfile, nicht configurationFile aber ...
  • Warum zum Teufel haben Sie eine <configurationfile> in der Konfiguration von hbm2cfgxml? Sie wollen es hier generieren ... Ich würde es entfernen.

Update: Sie sollten die Informationen setzen erforderlich ist, um die Datenbank in src/main/resources/database.properties zu verbinden (das ist der Standardwert der propertyfile Eigenschaft), nicht in src/main/resources/hibernate.cfg.xml (entfernen Sie diese Datei). Unterhalb einer Probe 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

Und wie gesagt, entfernen Sie die src/main/resources/hibernate.cfg.xml Datei, die Sie wollen es erzeugen.

  

gibt es eine Möglichkeit Maven tell Ressourcen in den Zielordner zu kopieren, bevor hbm2java Ausführung? (...)

Das hbm2java Ziel Invokes die Ausführung der Lifecycle-Phasen-Prozess-Ressourcen vor sich Ausführen (aus der Dokumentation). So dass das Standardverhalten ist und tritt mit hibernate3:hbm2java oder generate-sources , wenn hbm2java ist an sie gebunden.

Andere Tipps

Ok, Ich reparierte mein Problem maven durch zwingen die hbm.xml Dateien in den / target / classes / Paket / Namen zu setzen Ordner, so dass am Ende mein pom sieht wie folgt aus:

<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>

Und es funktioniert ok. Als fas wie ich in anderen Beiträgen, in einigen frühen Build Phasen jene hbm.xml Dateien kopiert werden sollen target / Hibernate3 / erzeugt-Mappings (wo sie werden durch Standard) Ziel sehen konnte / Klassen / Paket / name (wo sie überwintern-Tools aussieht), aber in meinem Fall sind sie nicht (was ich mache etwas falsch angibt). Also, wenn jemand da draußen gibt es zu wissen, was es sein könnte ich falsch mache, bitte sagen Sie mir. Es wird sonst zu genügen hat.

Es ist eine Sache, die nicht funktioniert: die Paketnamen werden nicht in den generierten POJOs und DAOs verwendet: aber ich erstellt einen weiteren Thread für diese hier .

Update: ok, jetzt habe ich es endlich. Das Problem mit dem Paketnamen fehlte, war in der Konfiguration des hbm2hbmxml Ziel. Ich vermisste die componentProperties mit Paket gibt, so dass die erzeugte hbm.xml die vollständig klassifizierten Klassennamen verpasst. Ich die oben pom aktualisiert, jetzt ist es funktioniert gut. Die Frage in Bezug auf explizite Kopieren der hbm.xml Dateien auf die target / classes Ordner ist immer noch der Fall, wenn.

Für ein Beispiel, wie man mit Maven Hibernate Tools zu verwenden, ohne die Verwendung von Hibernate3-maven-Plugin Check diesen Beitrag . Die Idee ist, Hibernate Tools Ant-Task mit Maven laufen. Dieser Ansatz gibt Ihnen die volle Kontrolle über den Prozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top