At line 1 added 234 lines |
Not sure this should be here, but thought I should document how I got started on a RSF project. |
(I wouldn't even assume that this project will ever get anywhere, but documenting a getting started with RSF could be helpful...) |
|
World is my "dream" project of getting a decent Email Calendar Task-List thing started. Some would call it a PIM, some others would call it insane and would query why I'm even bothering however, I shall begin and no doubt promptly forget about this when term and thus work starts in earnest... :p |
|
---- |
|
OK for starters... Lets take a look at what the basic pom.xml should be. |
|
First off I assume I'll be needing RSFHibernate3 and some other things so I guess I'll need a pom thus: |
|
{{{ |
<project xmlns="http://maven.apache.org/POM/4.0.0" |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 |
http://maven.apache.org/maven-v4_0_0.xsd"> |
<modelVersion>4.0.0</modelVersion> |
<name>RSF World</name> |
<groupId>org.zeripath</groupId> |
<artifactId>world</artifactId> |
<organization> |
<name>CARET</name> |
<url>http://www.caret.cam.ac.uk</url> |
</organization> |
<inceptionYear>2007</inceptionYear> |
<version>1.0</version> |
<packaging>war</packaging> |
|
<parent> |
<groupId>uk.org.ponder.pure-poms</groupId> |
<artifactId>standard-war</artifactId> |
<version>POM-3</version> |
</parent> |
|
<properties> |
<rsfutil.version>0.7.2</rsfutil.version> |
</properties> |
|
<repositories> |
<repository> |
<id>CARET-Maven2</id> |
<name>CARET Maven 2 Repository</name> |
<url>http://www2.caret.cam.ac.uk/maven2</url> |
</repository> |
<repository> |
<id>CARET-Maven2-dev</id> |
<name>CARET Maven 2 Dev Repository</name> |
<url>http://www2.caret.cam.ac.uk/maven2dev</url> |
<snapshots> |
<enabled>true</enabled> |
</snapshots> |
</repository> |
<dependencies> |
|
<dependency> |
<groupId>uk.org.ponder.rsfutil</groupId> |
<artifactId>rsfutil</artifactId> |
<version>${rsfutil.version}</version> |
<type>jar</type> |
</dependency> |
|
<dependency> |
<groupId>uk.org.ponder.rsfutil</groupId> |
<artifactId>RSFComponents-evolvers</artifactId> |
<version>${rsfutil.version}</version> |
<type>jar</type> |
</dependency> |
|
<dependency> |
<groupId>uk.org.ponder.rsfutil</groupId> |
<artifactId>rsfhibernate3</artifactId> |
<version>${rsfutil.version}</version> |
<type>jar</type> |
</dependency> |
|
<dependency> |
<groupId>uk.org.ponder.rsfutil</groupId> |
<artifactId>RSFComponents-templates</artifactId> |
<version>${rsfutil.version}</version> |
<type>war</type> |
</dependency> |
|
<dependency> |
<groupId>commons-logging</groupId> |
<artifactId>commons-logging</artifactId> |
<version>1.0.4</version> |
<type>jar</type> |
</dependency> |
|
|
</dependencies> |
<build> |
<resources> |
<resource> |
<directory>src/main/resources</directory> |
</resource> |
</resources> |
</build> |
|
</project> |
}}} |
|
Not entirely sure that's minimal nor quite what the parent pom is about. I expect I don't need that. |
|
---- |
|
Now we want a datamodel, and we don't want to be messing around too much with it, so lets try to get a maven-hibernate3 plugin working. |
|
I'll first make the project multiproject by moving the webapp part out and adding a dependence on world-datamodel. then I'll create a datamodel project. |
|
datamodel/pom.xml |
{{{ |
<project xmlns="http://maven.apache.org/POM/4.0.0" |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 |
http://maven.apache.org/maven-v4_0_0.xsd"> |
<modelVersion>4.0.0</modelVersion> |
<name>RSF World Datamodel</name> |
<groupId>org.zeripath</groupId> |
<artifactId>world-datamodel</artifactId> |
<organization> |
<name>CARET</name> |
<url>http://www.caret.cam.ac.uk</url> |
</organization> |
<inceptionYear>2007</inceptionYear> |
<version>1.0</version> |
<packaging>jar</packaging> |
|
<repositories> |
<repository> |
<id>CARET-Maven2</id> |
<name>CARET Maven 2 Repository</name> |
<url>http://www2.caret.cam.ac.uk/maven2</url> |
</repository> |
<repository> |
<id>CARET-Maven2-dev</id> |
<name>CARET Maven 2 Dev Repository</name> |
<url>http://www2.caret.cam.ac.uk/maven2dev</url> |
<snapshots> |
<enabled>true</enabled> |
</snapshots> |
</repository> |
<repository> |
<id>Codehaus Snapshots</id> |
<url>http://snapshots.repository.codehaus.org/</url> |
<snapshots> |
<enabled>true</enabled> |
</snapshots> |
<releases> |
<enabled>false</enabled> |
</releases> |
</repository> |
</repositories> |
<pluginRepositories> |
<pluginRepository> |
<id>Codehaus Snapshots</id> |
<url>http://snapshots.repository.codehaus.org/</url> |
<snapshots> |
<enabled>true</enabled> |
</snapshots> |
<releases> |
<enabled>false</enabled> |
</releases> |
</pluginRepository> |
</pluginRepositories> |
|
<dependencies> |
<dependency> |
<groupId>commons-logging</groupId> |
<artifactId>commons-logging</artifactId> |
<version>1.0.4</version> |
<type>jar</type> |
</dependency> |
</dependencies> |
<build> |
<resources> |
<resource> |
<directory>src/main/resources</directory> |
<excludes><exclude>hibernate.cfg.xml</exclude></excludes> |
</resource> |
</resources> |
<plugins> |
<plugin> |
<groupId>org.codehaus.mojo</groupId> |
<artifactId>hibernate3-maven-plugin</artifactId> |
<version>2.0-SNAPSHOT</version> |
<executions> |
<execution> |
<goals> |
<goal>hbm2java</goal> |
</goals> |
</execution> |
</executions> |
<configuration> |
<hibernate> |
<configurationFile>/src/main/resources/hibernate.cfg.xml</configurationFile> |
</hibernate> |
</configuration> |
</plugin> |
</plugins> |
<extensions> |
<extension> |
<groupId>mysql</groupId> |
<artifactId>mysql-connector-java</artifactId> |
<version>5.1.5</version> |
</extension> |
</extensions> |
</build> |
|
</project> |
}}} |
''Again I'm not sure whether this is minimal...'' |
|
Now in src/main/resources/ create a hibernate.cfg.xml and mappings.hbm.xml: |
|
hibernate.cfg.xml |
{{{ |
<?xml version="1.0"?> |
<!DOCTYPE hibernate-configuration PUBLIC |
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" |
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> |
<hibernate-configuration> |
<session-factory> |
<mapping resource="mappings.hbm.xml"/> |
</session-factory> |
</hibernate-configuration> |
}}} |
|
mappings.hbm.xml should be of the type of hibernate-mapping |
|
Now the rather confusing thing is: hbm2java relies the mappings files being in target/classes for it to see them |
This means that the hibernate3:hbm2java goal will run in the process-resources phase rather than generate-sources. (This confused me for some time.) |
|
Now if you've got it all correct mvn install should compile and create a working datamodel for you. Wooness... |