# Eclipse: Einbinden externer Projekte in Web-Projekt



## Conti (26. Feb 2010)

Hallihallo Leute,

jetzt hab ich wieder ein Problem, dass ich nicht ganz verstehe.

Beispiel 1:
Ein einfaches Java Projekt "Proj1" und ein zweites einfaches Java Projekt "Proj2"
Im BuildPath von "Proj1" binde ich das zweite Projekt ein und rufe dann einfach eine Klasse von "Proj2" auf. Also zuerst instanziieren udn dann eine Methode der instanziierten Klasse aufrufen.
Alles funktioniert wunderbar!

Beispiel 2:
Ich habe ein Dynamic Web Project "Proj1" und ein zweites einfaches bzw. web-Projekt (spielt keine Rolle - hab beides ausprobiert!)
Gehe vor, wie bei Beispiel1 und obwohl ich kompilieren kann und auch Code-Completition funktioniert bekomme ich zur Laufzeit folgenden Fehler:
javax.servlet.ServletException: de/proj2/pologin/bean/POUser
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:323)

root cause:
java.lang.NoClassDefFoundError: de/proj2/pologin/bean/POUser

Warum funktioniert das bei Web-Projekten nicht, was bei normalen Java-Projekten einwandfrei funktioniert?


----------



## SlaterB (26. Feb 2010)

was zum Himmel ist ein 'Java Projekt' oder ein 'BuildPath',
beziehst du dich auf eine konkrete Entwicklungsumgebung (IDE) wie Eclipse? 
in IDEs sorgen die IDE-Konfigurationen, dass beim Start aus der IDE heraus alles rund läuft

ein Web-Projekt zu starten kann aber oft was anderes sein, dort werden allgemeine Server initialisiert, die ihre Informationen zum Klassen und Libraries aus XML-Konfigurations-Dateien ziehen und ähnlich verrücktes,
auch wenn du allgemeine Libraries wie j2ee.jar in dein IDE-Projekt eingebunden hast, reicht das normalerweise nicht für alle Zeit,
ein Web-Server hat noch ein lib-Verzeichnis mit eigenen jars usw., da muss vielleicht ein jar des anderen Projektes hin,

komplizierte Sache in jedem Fall, im Detail kann ich da nicht helfen, außer dich zumindest zu ermutigen, den Namen der IDE in den Titel des Themas einzubauen, falls meine Vermutungen richtig sind


----------



## maki (26. Feb 2010)

> Warum funktioniert das bei Web-Projekten nicht, was bei normalen Java-Projekten einwandfrei funktioniert?


Weil WARs andere Tiere sind als JARs 
War nie vorgesehen mehrere WebApps zu einer durch den Server kombinieren zu lassen, du müsstest deine WebAps erst mergen...


----------



## Conti (26. Feb 2010)

Hallo Leute,

natürlich habe ich von Eclipse gesprochen. Sorry! Hätte detailierter schreiben sollen. (Problem: Ich bin noch nicht lange beim Programmieren mit dabei!)

Also ich benutze Eclipse Galileo (Server Tomcat 6) und erstelle in Beispiel 1 ein "Java Project" und ich Beispiel 2 "Dynamic Web Project".
Was da genau im Hintergrund passiert...muss ich zugeben, weiss ich nicht. Fakt ist, dass die Ordnerstruktur unterschiedlich ist und ich beim WebProject Deployment descriptor und die nötigen WEB-INF Ordnerstrukturen habe usw.
Ich habe im lib-Ordner eine Palette von JAR-Dateien, die ich aber auch ins zweite Projekt einbinde. Hat das Problem aber nicht gelöst. Ebendso auch mit dem Deployment-Descriptor.

Ich habe auch keine WAR-Files aus den Projekten erstellt. Beide Projekte sind offen im Workspace.

Schon mal danke an euch für die Antworten!


----------



## Conti (26. Feb 2010)

Wie merged man zwei Projekte?
Vermute nämlich, dass zur Laufzeit nur das eine Projekt auf dem Server läuft, während der Server keine Kenntnis vom zweiten Projekt hat.


----------



## maki (26. Feb 2010)

> Schon mal danke an euch für die Antworten!


Meine Antwort hast du schon bekommen 



Conti hat gesagt.:


> Wie merged man zwei Projekte?


Du machst aus 2 WebApps eine, per Hand 



> Vermute nämlich, dass zur Laufzeit nur das eine Projekt auf dem Server läuft, während der Server keine Kenntnis vom zweiten Projekt hat


Falsche Vermutung 
Was du willst geht schlicht nicht.

_Holzweg_


----------



## KYLT (26. Feb 2010)

Den einzigen Umweg den du tätigen kannst, um z.B. Logic dahinter aufrufen zu können, ist die Entkoppelung der Logic in eine höhere Schicht. Hier wäre z.B. die Möglichkeit mittels EJB 3.1 eine Bean zu erstellen, die wärend der gesamten Laufzeit des Containers zur verfügung steht. Somit auch für mehrere Applikationen. Eine Andere Möglichkete währen Webserviceaufrufe für bestimmte Infos.

EDIT: Ich bin mir aber nicht sicher, ob das in ner Enterprise Application mögliche wäre, mit zwei Wars direkten zugriff zu tätigen... , ich habs zumindest noch nicht versucht.


----------



## mvitz (26. Feb 2010)

Die beste Lösung in diesem Falle wäre, dein Java Projekt über Eclipse in ein JAR zu exportieren. DIeses JAR kopierst du dann in das WebProject in den Ordner: WebContent/WEB-INF/lib. Danach brauchst du auch die Abhängigkeit des Projektes nicht mehr.


----------



## Conti (26. Feb 2010)

Dann ist aber nix mehr mit Debuggen oder?




mvitz hat gesagt.:


> Die beste Lösung in diesem Falle wäre, dein Java Projekt über Eclipse in ein JAR zu exportieren. DIeses JAR kopierst du dann in das WebProject in den Ordner: WebContent/WEB-INF/lib. Danach brauchst du auch die Abhängigkeit des Projektes nicht mehr.


----------



## mvitz (26. Feb 2010)

Doch, musst du nur zu der Lib noch die Sourcen hinzufügen. Nur eben mal in dem JAR Projekt Änderungen machen ohne ein neues JAR zu erzeugen funktioniert dann nicht mehr.


----------



## vokke (2. Apr 2010)

Hallo Conti,
ich hatte heute das gleiche Problem und war mir sicher, dass ich es auch schon einmal gelöst habe.

Hier ist die Lösung:
Du musst das externe Projekt noch in den "Java EE Module Dependencies" des Dynamic Web Projects verfügbar machen - dann werden die Klassen auch gefunden.

Ich hoffe, ich konnte Dir damit weiterhelfen.
Happy Coding,
Vokke


----------

