Frage

Ich gründe Maven oben kommentierten Java-Klassen zu nehmen und etwas DDL zu erzeugen, die auf der Datenbank variieren. Gibt es einen besseren Weg, dies zu tun? Es scheint, wie ich in der Lage sollte die Eingabe in der hbm2ddl Plugin (als Teil einer Pipeline) und nicht zu sagen, dass es für den Betrieb auf dem Ausgang der Ressource zu filtern Filterung (was ich dann von meinem letzten jar ausfiltern muß).

Ich bin Filterung meiner hibernate.cfg.xml Datei zu ersetzen Umgebungseigenschaften auf Basis der lokalen Entwickler-Setup:

  <build>
    <filters>
      <filter>${user.home}/datamodel-build.properties</filter>
    </filters>
    <resources><resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource></resources>
  </build>

Dann laufe ich hbm2ddl am Ausgang

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>hibernate3-maven-plugin</artifactId>
  ...
 <configuration>
   <componentProperties>
   <configurationfile>target/classes/com/myOrg/datamodel/hibernate.cfg.xml</configurationfile>
</plugin>

Ich muß die hibernate.cfg.xml aus meiner Produktion jar auszuzufiltern, da ich irgendetwas nicht versenden zu meiner internen Entwickler-Umgebung verwendet werden soll.

War es hilfreich?

Lösung

Ich habe das gleiche Problem, und hier ist, wie ich es gelöst. Ich benutze eine separate database.properties-Datei, die die Verbindungsdaten hält und ich keine meiner XML-Dateien filtern.

Dieses separate database.properties Datei wird gefiltert, aber da es sich um eine Test befindet Ressource in /src/main/test es nicht in die endgültige Artefakt gestellt bekommen. Ich dann sagen hbm2ddl wo sie finden wie folgt:

            <configuration>
                <components>
                    <component>
                        <name>hbm2ddl</name>
                        <implementation>jpaconfiguration</implementation>
                    </component>
                </components>
                <componentProperties>
                    <propertyfile>src/test/resources/database.properties</propertyfile>
                    <!-- Gives the name of the persistence unit as defined in persistence.xml -->
                    <persistenceunit>myapp-core</persistenceunit>
                    <!-- Tells the plugin to send the output to a file -->
                    <outputfilename>create-${database.vendor}-schema.sql</outputfilename>
                    <!-- Pretty Format SQL Code -->
                    <format>true</format>
                    <!-- Do not create tables automatically - other plug-ins will handle that -->
                    <export>false</export>
                    <!-- Do not print the DDL to the console -->
                    <console>false</console>
                </componentProperties>
            </configuration>

Hope hilft es sowieso ....

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