2010-05-17 2 views
5

J'essaye de configurer hbm2java avec maven pour générer des classes POJO et des objets DAO. L'un des problèmes auxquels je suis confronté est que les noms de paquets ne sont pas générés. J'utilise la pom suivante pour que:Comment configurer hbm2java et hbm2dao pour ajouter un nom de pack aux classes générées

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

Pourtant, le code généré commence par ce qui suit:

// default package 
// Generated 2010-05-17 13:11:51 by Hibernate Tools 3.2.2.GA 

/** 
* Messages generated by hbm2java 
*/ 
public class Messages implements java.io.Serializable { 

est-il un moyen de forcer Maven pour générer le package partie tel que défini dans nomdupaquet?

Mise à jour:

Voici mon hibernate.cfg.xml, également généré automatiquement par mise en veille prolongée outils (hbm2cfgxml):

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.c3p0.max_size">20</property> 
     <property name="hibernate.c3p0.max_statements">50</property> 
     <property name="hibernate.c3p0.min_size">5</property> 
     <property name="hibernate.c3p0.timeout">1800</property> 
     <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 
     <property name="hibernate.connection.password">password</property> 
     <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/db</property> 
     <property name="hibernate.connection.username">username</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> 
     <mapping resource="package/name/Messages.hbm.xml" /> 
    </session-factory> 
</hibernate-configuration> 
+0

Qu'est-ce que votre fichier hibernate.cfg.xml ressembler. Est-il possible que le fichier remplace le paramètre? Notez également que le fichier de configuration que vous avez spécifié est mal orthographié, hibernane.cfg.xml. Je ne suis pas sûr que ce soit intentionnel ou non. – tschaible

+0

La faute d'orthographe s'est produite lors du copier-coller et le formatage du code pour StackOverflow - mais merci. J'ai ajouté mon fichier hibernate.cfg.xml. – mmm

Répondre

3

Juste au cas où, voici une configuration de travail du hibernate3-maven-plugin pour une approche ascendante:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>hibernate3-maven-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
     <id>generate-xml-files</id> 
     <phase>generate-resources</phase> 
     <goals> 
      <goal>hbm2hbmxml</goal> 
      <goal>hbm2cfgxml</goal> 
     </goals> 
     </execution> 
     <execution> 
     <id>generate-entities</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>hbm2java</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <components> 
     <component> 
      <name>hbm2hbmxml</name> 
      <implementation>jdbcconfiguration</implementation> 
      <outputDirectory>target/classes</outputDirectory> 
     </component> 
     <component> 
      <name>hbm2cfgxml</name> 
      <implementation>jdbcconfiguration</implementation> 
      <outputDirectory>target/classes</outputDirectory> 
     </component> 
     <component> 
      <name>hbm2java</name> 
      <implementation>configuration</implementation> 
      <outputDirectory>target/generated-sources/hibernate3</outputDirectory> 
     </component> 
     </components> 
     <componentProperties> 
     <propertyfile>src/main/resources/database.properties</propertyfile> 
     <jdk5>true</jdk5> 
     <ejb3>false</ejb3> 
     <packagename>com.mycompany.myapp</packagename> 
     <format>true</format> 
     <haltonerror>true</haltonerror> 
     </componentProperties> 
    </configuration> 
    <dependencies> 
     <dependency> 
     <groupId>org.apache.derby</groupId> 
     <artifactId>derby</artifactId> 
     <version>10.5.3.0_1</version> 
     </dependency> 
    </dependencies> 
    </plugin> 

Et est le contenu ici de mon dossier src/main/database.properties:

hibernate.connection.driver_class=org.apache.derby.jdbc.EmbeddedDriver 
hibernate.connection.url=jdbc:derby:./derbyDBs/EMPLDB 
hibernate.connection.username=APP 
hibernate.connection.password=APP 
hibernate.dialect=org.hibernate.dialect.DerbyDialect 

#workaround for http://opensource.atlassian.com/projects/hibernate/browse/HBX-1145 
hibernate.connection.autocommit=true 

Cette configuration:

  1. *.hbm.xml dans target/classes Génère (avec l'emballage) pendant generate-resources.
  2. Génère un hibernate.cfg.xml dans target/classes avec des entrées pour les fichiers de mappage.
  3. Génère des entités à partir des mappages dans target/generated-sources/hibernate3 (je recommande de suivre la convention target/generated-sources/<tool> pour les sources générées afin qu'elles soient détectées automatiquement par les IDE).

Voici un résultat de clean compile contre une base de données exemple avec deux tables:

 
$ mvn clean compile 
... 
$ tree target/ 
target/ 
├── classes 
│   ├── com 
│   │   └── mycompany 
│   │    └── myapp 
│   │     ├── Department.class 
│   │     ├── Department.hbm.xml 
│   │     ├── Employee.class 
│   │     └── Employee.hbm.xml 
│   ├── database.properties 
│   └── hibernate.cfg.xml 
└── generated-sources 
    └── hibernate3 
     └── com 
      └── mycompany 
       └── myapp 
        ├── Department.java 
        └── Employee.java 
+0

Nice, plus simple que le mien :). Avez-vous une idée de la raison pour laquelle les fichiers hbm.xml ne sont pas copiés automatiquement dans les cibles/classes de generate-sources/hibernate3/generated-mappings avant que l'objectif generate-sources ne soit exécuté? Je vois que vous forcez aussi maven à placer ces fichiers directement dans le dossier target/classes. N'y a-t-il pas moyen de le configurer? – mmm

+0

@mmm Je ne sais pas pourquoi ils ne le sont pas (le plugin devrait * ajouter * ce répertoire comme répertoire de ressources au pom). Il devrait être possible d'utiliser le plugin Build Helper (voir la page [Usage] (http://mojo.codehaus.org/build-helper-maven-plugin/usage.html) pour cela. Mais ce serait plus verbeux et je ne vois pas de réels avantages. Donc, puisque la solution que j'utilise fonctionne, je n'ai jamais essayé de le faire autrement. –

0

Ok, je compris. Je mets la réponse here.

Questions connexes