Well, there is a Maven Hibernate3 Plugin if you don't want to mix Ant and Maven (this is a good idea here IMO). It has hbm2java , which by default is bound to the generate-sources phase. See the Mojo website for more details, but the plugin setup might look something like this:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>hibernate3-maven-plugin</artifactId> <version>2.2</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>hbm2java</goal> </goals> </execution> </executions> <configuration> <components> <component> <name>hbm2java</name> <implementation>configuration</implementation> <outputDirectory>target/generated-sources/hibernate3</outputDirectory> </component> </components> <componentProperties> <drop>true</drop> <jdk5>true</jdk5> <configurationfile>/src/main/resources/hibernate.cfg.xml</configurationfile> </componentProperties> </configuration> </plugin>
EDIT: The plugin is actually looking for .hbm.xml in target/classes to generate java source files. So, if you put the mapping files in src/main/resources , they will be copied to target/classes during the process-resources phase, which is called by the plugin, and everything will work. I just checked this with the following example project:
maven-hibernate3-testcase
| - pom.xml
`- src
| - main
| | - java
| `- resources
| | - Person.hbm.xml
| `- hibernate.cfg.xml
`- test
`- java
pom.xml almost empty, it just contains the plugin configuration shown above and the junit dependency. hibernate.cfg.xml contains:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">org.apache.derby.jdbc.ClientDriver</property> <property name="connection.url">jdbc:derby://localhost:1527/mydatabase</property> <property name="connection.username">app</property> <property name="connection.password">app</property> <property name="connection.pool_size">1</property> <property name="dialect">org.hibernate.dialect.DerbyDialect</property> <property name="show_sql">false</property> <mapping resource="Person.hbm.xml" /> </session-factory> </hibernate-configuration>
And Person.hbm.xml looks like this:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Person" table="person"> <id name="id" type="int"> <generator class="increment" /> </id> <property name="name" column="cname" type="string" /> </class> </hibernate-mapping>
In this configuration, running mvn install generates Person.java , as shown below:
$ cat target/generated-sources/hibernate3/Person.java // default package // Generated Dec 14, 2009 2:19:22 PM by Hibernate Tools 3.2.2.GA /** * Person generated by hbm2java */ public class Person implements java.io.Serializable { private int id; private String name; public Person() { } public Person(String name) { this.name = name; } public int getId() { return this.id; } public void setId(int id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
Everything works as described.