Hallo @ll,
ich habe gerade folgende Situation erzeugt.
Ich nutze den Eclipse Deployment descriptor um ein Webprojekt entsprechend auf einen in Eclipse konfigurierten Server (Tomcat) zu deployen.
Weiterhin nutze ich Maven als generellen Buildmechanismus, welches mir zum Einen, ein JAR aus den Javaklassen baut, ein WAR der Webanwendung und darüberhinaus ein FOLDER, welcher dem entpackten WAR file gleicht.
Wozu:
- JAR aus Sourcen: Das jar wird durch maven als Lib in die Webanwendung eingebunden, damit verhindere ich, dass Classfiles in Web-INF/classes erscheinen. Das hat seinen Grund und soll so bleiben. CustomSource.jar wird also in WEB-INF/lib/CustomSource.jar durch Maven abgelegt.
- WAR: Das war file dient logischerweise als Gesamtpaket, welche später auf einem Remoteserver genutzt und dort entpackt werden soll. Es hat nichts mit lokaler Entwicklung oder debugging zu tun. Es ist das Gesamtresultat des Buildvorganges.
- FOLDER: Der Folder, welcher dem Inhalt des Warfiles entspricht wurde durch Maven erzeugt und spiegelt also die finale Struktur der Webanwendung für einen Webserver wider. Dieser Folder enthält alle genutzten Libraries (Dependencies), welche nicht in der Projektablage selber auftauchen, sondern nur über Maven eingebunden werden.
Wenn ich also die Anwendung aus Eclipse heraus deployen möchte, muss ich die libraries temporär ins Projekt bekommen, da diese nicht in der Sourcecodeverwaltung (CVS) abgelegt werden.
Damit ich nun bei Änderungen an Klassen aus Zeitgründen nicht immer das komplette Buildscript laufen lassen muss habe ich noch folgendes Setting:
Die von Eclipse erzeugten CLASS-Files liegen in /target/classes, welcher im Deployment Assembly Descriptor von Eclipse genutzt wird. Damit spare ich mir den Mavenbuild, welcher mir die Klassen als JAR file verpackt in die Webanwendung legt. Der gesamte Buildprozess inklusive Assembly dauert dafür zu lange.
Für das Eclipse Deployment benötige ich daher nun folgende Dateien:
- target/classes (durch Eclipse generierte Class-Files)
- target/webappName/WEB-INF/lib/*.jar (durch Maven dependencies erzeugt, initial 1 kompletter Mavenbuild notwendig)
- weitere Ordner, welche unwichtig für die Frage sind.
Der Maven build legt mir in WEB-INF/lib die CustomSource.jar ab, welche ebenfalls ALLE Class-Files enthält, die auch von Eclipse in /target/classes abgelegt werden.
Wenn Eclipse nun die Anwendung deployt, dann habe ich folgendes:
webapp/WEB-INF/classes/A.class
webapp/WEB-INF/lib/CustomSource.jar/A.class
Da nicht klar definiert ist, was der Classloader als erstes lädt, frage ich mich, wie werd ich die CustomSource.jar für das Eclipse Deployment wieder los?
Ich finde das Projekt so echt gut aufgesetzt und habe durch Maven viele Möglichkeiten. Doch beim Eclipse Deployment möchte ich soviel Zeit wie möglich sparen. Der Mavenbuild wird dann nur notwendig, wenn ich finale WARs generieren möchte, oder dependencies modifiziere.
Für Konfigurationen und Änderungen an CLASS-Files soll das Assembly durch Maven nicht notwendig sein.
Bei Fragen fragen
ich habe gerade folgende Situation erzeugt.
Ich nutze den Eclipse Deployment descriptor um ein Webprojekt entsprechend auf einen in Eclipse konfigurierten Server (Tomcat) zu deployen.
Weiterhin nutze ich Maven als generellen Buildmechanismus, welches mir zum Einen, ein JAR aus den Javaklassen baut, ein WAR der Webanwendung und darüberhinaus ein FOLDER, welcher dem entpackten WAR file gleicht.
Wozu:
- JAR aus Sourcen: Das jar wird durch maven als Lib in die Webanwendung eingebunden, damit verhindere ich, dass Classfiles in Web-INF/classes erscheinen. Das hat seinen Grund und soll so bleiben. CustomSource.jar wird also in WEB-INF/lib/CustomSource.jar durch Maven abgelegt.
- WAR: Das war file dient logischerweise als Gesamtpaket, welche später auf einem Remoteserver genutzt und dort entpackt werden soll. Es hat nichts mit lokaler Entwicklung oder debugging zu tun. Es ist das Gesamtresultat des Buildvorganges.
- FOLDER: Der Folder, welcher dem Inhalt des Warfiles entspricht wurde durch Maven erzeugt und spiegelt also die finale Struktur der Webanwendung für einen Webserver wider. Dieser Folder enthält alle genutzten Libraries (Dependencies), welche nicht in der Projektablage selber auftauchen, sondern nur über Maven eingebunden werden.
Wenn ich also die Anwendung aus Eclipse heraus deployen möchte, muss ich die libraries temporär ins Projekt bekommen, da diese nicht in der Sourcecodeverwaltung (CVS) abgelegt werden.
Damit ich nun bei Änderungen an Klassen aus Zeitgründen nicht immer das komplette Buildscript laufen lassen muss habe ich noch folgendes Setting:
Die von Eclipse erzeugten CLASS-Files liegen in /target/classes, welcher im Deployment Assembly Descriptor von Eclipse genutzt wird. Damit spare ich mir den Mavenbuild, welcher mir die Klassen als JAR file verpackt in die Webanwendung legt. Der gesamte Buildprozess inklusive Assembly dauert dafür zu lange.
Für das Eclipse Deployment benötige ich daher nun folgende Dateien:
- target/classes (durch Eclipse generierte Class-Files)
- target/webappName/WEB-INF/lib/*.jar (durch Maven dependencies erzeugt, initial 1 kompletter Mavenbuild notwendig)
- weitere Ordner, welche unwichtig für die Frage sind.
Der Maven build legt mir in WEB-INF/lib die CustomSource.jar ab, welche ebenfalls ALLE Class-Files enthält, die auch von Eclipse in /target/classes abgelegt werden.
Wenn Eclipse nun die Anwendung deployt, dann habe ich folgendes:
webapp/WEB-INF/classes/A.class
webapp/WEB-INF/lib/CustomSource.jar/A.class
Da nicht klar definiert ist, was der Classloader als erstes lädt, frage ich mich, wie werd ich die CustomSource.jar für das Eclipse Deployment wieder los?
Ich finde das Projekt so echt gut aufgesetzt und habe durch Maven viele Möglichkeiten. Doch beim Eclipse Deployment möchte ich soviel Zeit wie möglich sparen. Der Mavenbuild wird dann nur notwendig, wenn ich finale WARs generieren möchte, oder dependencies modifiziere.
Für Konfigurationen und Änderungen an CLASS-Files soll das Assembly durch Maven nicht notwendig sein.
Bei Fragen fragen