(C) 2009-05-12 Christoph Knabe
AppFuse ist ein Startpunkt zum Entwickeln von geschichteten Web-Applikationen in Java mittels Spring 2.5 als Dependency Injection Container und einer Reihe von auswählbaren Oberflächen- und Persistenz-Rahmenwerken. Hier stelle ich eine von mir verifizierte Variante für das Oberflächen-Rahmenwerk Spring MVC und das Persistenz-Rahmenwerk Hibernate 3 unter Benutzung des Build-Werkzeugs Maven 2 vor.
Vorgegangen wurde nach http://appfuse.org/display/APF/AppFuse+QuickStart. Einzelne Abweichungen werden hier beschrieben und begründet.
Download und Installation von Maven ab Version 2 siehe:
http://maven.apache.org/download.html
Dies bedeutet auch, die Umgebungsvariablen M2
und M2_HOME
zu setzen.
Maven 2 legt bei der ersten Benutzung ein lokales Repository im Home-Verzeichnis des
Benutzers an. Bei mir auf Windows XP liegt dieses im Verzeichnis
C:/Dokumente und Einstellungen/knabe/.m2/repository
Das durch Maven hier mitbenutzte Tool ANT 1.7.0 verträgt keine Zwischenräume
im Verzeichnisnamen. Daher muss auch die System Property "user.home" Unix-kompatibel gesetzt werden (siehe unten).
Im Repository werden die Dateien für eine Gruppe org.g1.g2
für das Artefakt a
für die Versionsvariante m.n-v
abgelegt im Verzeichnis
org/g1/g2/a/m.n-v/
Die Dateien heißen a-m.n-v.jar
und a-m.n-v-sources.jar
und so weiter.
MAVEN_OPTS
mit dem Wert -Djava.io.tmpdir=D:/tmp -Duser.home=C:/DOKUME~1/knabe
definieren.D:/tmp
für temporäre Dateien (u.a. die von H2) existieren.
DOKUME~1
ist der DOS-Aliasname von Dokumente und Einstellungen
.
(Wenn weitere mit Dokume
beginnende Verzeichnisse oder Dateien in C:\
stehen,
kann der Aliasname auch DOKUME~2
oder ähnlich lauten.)
Bitte überprüfen Sie, dass dieser tatsächlich auf das Verzeichnis Dokumente und Einstellungen
zeigt. knabe
ist durch Ihren Benutzernamen zu ersetzen.
swp-appfuse
und cd hinein.
mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.2 -DgroupId=de.beuth_hochschule.knabe.swp09 -DartifactId=myprojectDies erzeugt ein Unterverzeichnis
myproject
. Dorthinein mit cd wechseln.
-Ph2
(Im Produktionsbetrieb sollte man auf ein ausgewachsenes Datenbanksystem wie PostgreSQL oder MySQL umstellen.)
-e
mvn -e -Ph2 appfuse:full-source
src/de/beuth_hochschule/knabe/swp09
und darin die Paketverzeichnisse util, model, dao, service, webapp
,
die den einzelnen Schichten des Muster-Softwaresystems entsprechen.
mvn -e -Ph2 eclipse:eclipse
.project
und .classpath
für Eclipse.
In .classpath
wird jede durch Maven verwaltete Abhängigkeit referenziert
über eine Eclipse Classpath Variable M2_REPO
mvn -e -Ph2 test
de.beuth_hochschule.knabe.swp09.service.impl.UserManagerImplTest.testGetUser() Time elapsed: 0.016 sec <<< FAILURE! java.lang.IllegalArgumentException: can only set expectations on mock objects at org.jmock.internal.InvocationExpectationBuilder.captureExpectedObject(InvocationExpectationBuilder.java:67) at org.jmock.internal.InvocationExpectationBuilder.of(InvocationExpectationBuilder.java:107) at org.jmock.Expectations.one(Expectations.java:89) at de.beuth_hochschule.knabe.swp09.service.impl.UserManagerImplTest$1.(UserManagerImplTest.java:40) at de.beuth_hochschule.knabe.swp09.service.impl.UserManagerImplTest.testGetUser(UserManagerImplTest.java:39)
Window > Preferences... > Java > Build Path > Classpath Variables > New...
eine Variable mit dem Namen M2_REPO und dem Path zum eigenen, lokalen Maven-Repository
(s.o.) definieren. Diese gilt dann für alle Projekte im Eclipse-Workspace.
myproject
auswählen, in dem .project und .classpath stehen.
mvn -e -Ph2 jetty:run
http://localhost:8080
mit einem Web Browser.
user
, Passwort user
, oder selbst einen neuen Benutzer erstellen.
mvn -e -Ph2 site:site
myproject\target\site\index.html