# Eclipse + Maven + Add Non-Maven Project to Build Path



## halech (17. Januar 2012)

Hallo Leute,

ich habe eine Frage, die von euch Experten sicher in einem Satz beantwortet werden kann.

Ich arbeite an Eclipse Indigo mit dem maven2eclipse plugin und schreibe eine Spring Server Applikation, die ich auf einen Tomcat 7 deploye (Bis jetzt immer Run As -> Run on a Server).

Das funktioniert auch super nur ein Problem ergibt sich, wenn ein ein anderes Java (Eclipse) Projekt (Non Maven) in mein Projekt einbinden will. Ich dachte, dass ich einfach ueber Build Path "Add Project" machen koennte, aber dann bekomme ich zur Startzeit einen "java.lang.NoClassDefFoundError", der besagt, dass die Klassen aus dem per Build Path eingebundenen Projekt nicht auffindbar sind. Ich vermute, dass das daran liegt, dass ich das Java Projekt nicht per Maven eingebunden habe. Gibt es die Moeglichkeit dieses Projekt per Maven einzubinden, ohne das es selber ein Maven Projekt ist? Ich weiss, dass man per mvn install:.... das Projekt in sein Repository stecken kann aber das ist mir nicht dynamisch genug und zum Testen echt unpraktisch, denn beide Projekte werden staendig geupdated.


Ich vermute, dass man diese Problem in einem Satz loesen kann und bedanke mich schon im voraus dafuer.

Gruesse


----------



## halech (17. Januar 2012)

Hier noch eine Teilmenge des Stacktraces. Die Klasse IRead in dem Package pack kann nicht gefunden werden.

ERROR: org.springframework.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '/PersonService' defined in ServletContext resource [/WEB-INF/remoting-servlet.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: [Lpack/IRead;
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)


----------



## halech (17. Januar 2012)

Hallo Leute,

wie so oft findet man die Loesung gleich nachdem man die Frage gestellt hat.

Ich habe das Projekt zu dem Project Properties -> Deployment Assembly hinzugefuegt und jetzt tut es. 

Ist das die Art, wie man das Problem loest oder nur ein haesslicher Hack?

Gruesse


----------



## slowfly (17. Januar 2012)

Du hast nur das Eclipse, bzw. das Projekt so konfiguriert, dass du deine Applikation quasi "komplett" auf deinen Applikationsserver bekommst. Wenn du jetzt einen mvn clean install, oder gar ein releaserepare und releaseerform machst, wird dir das Projekt dann im WEB-INF/lib fehlen und du bist dann wieder so weit wie am Anfang.

Bei solchen non-maven-Projekten oder non-maven-Jars gehen wir nichts desto trotz hin und ver-maven-ifizieren das ganze. Jars kann man einfach mit den Mavenbefehlen ins Repository installieren (mvn install -Dfile=/path/my.jar -DgeneratePom=true -DartifactId=de.tutorials oder ähnlich). Bei Projekten kannst du Maven aktivieren, dann wird ein pom.xml angelegt. Das Mavenplugin merkt dann von sich aus, dass da im Workspace so ein Projekt hat und nimm dann automatisch das fürs Deployment (ansonsten das aus dem lokalen Repository)

Je nach Bibliothek, z.B. JDBC-Treiber, kann man das auch auf dem Applikationsserver im server/lib ablegen...

Gruss
slowy


----------



## halech (20. Januar 2012)

Vielen Dank!

Bis jetzt habe ich Maven nur zum unkomplizierten Laden und Einfuegen von Jars genutzt und die war Datei dann per Eclipse generiert. Mir ist schon klar, dass das einer der schlechteren Wege ist sowas zu machen aber bis jetzt hat es ja immer geklappt . Ich werde mal sehen, ob ich das mit meinen beschraenkten Maven Faehigkeiten hin bekomme einen "clean install" zu machen.

Gruesse,
Halech


----------

