Maven Classpath auf verschiedene Ordner setzen

CrommCruach

Mitglied
Hallo,

ich hab in meinem Projekt folgende Verziechnisstruktur

Code:
-MyFolder
    -modules
       -myModule1.jar
       -...
    -lib
       -hibernate-xy.jar

Diese Verzeichnisstruktur erstelle ich aus einem Multimodul-Projekt mit Hilfe des Maven-Assemblyl-Plugin. Im Ordner modules liegen die von mir Programmierten module. Im Order lib liegen externe Jars wie z.B. hibernate die ich nutze (aber nicht selber schreibe).

Nun muss ich abhängig davon ab es eine externe oder eigene Jar ist den Classpath in der Mainfest anlegen. Lieder kenne ich nur die möglichkeit einen Classpath zu setzen

Die Frage ist nun: Wie kann ich 2 Classpaths setzen, so dass die externen jars lib/ und meine module modules/ als Classpath haben? Gibt es ein Plugin mit der man sich so eine Mainfest nach diesen Regeln generieren lassen kann?!

Gruß
CrommCruach
 

KSG9|sebastian

Top Contributor
Da du Maven verwendest sollst du externe Libs gerade NICHT im Projekt/Modul ablegen sondern über das/ein Mavenrepository beziehen. Die Lib wird dann in dein lokales Repo abgelegt und gut.

Falls das nicht geht (bei Libs wie z.B. Hibernate geht es definitiv) hast du mehrere Möglichkeiten:
1. Jar manuell ins lokale Repo installieren und referenzieren
2. Jar automatisch installieren per Konfiguration über das maven-install-plugin und entsprechende Goals
3. Jar direkt referenzieren über Scope SYSTEM (Maven - Introduction to the Dependency Mechanism)

Oder verstehe ich dein Problem nicht richtig? Redest du vom Build-Artefakt und der/den generierten JAR-Dateien? Falls ja kannst du über das maven-jar-plugin enstprechende Einstellungen vornehmen: Introduction
 
Zuletzt bearbeitet:

CrommCruach

Mitglied
Danke für deine Antwort. Du hast mein Problem nicht verstanden :)

Natürlich beziehe ich externe libs über das Repro. Beim Build lasse ich dann maven-asselbly (als seperates Modul) mein "Programmverzeichniss" erstellen. Ich habe 4 Module:

Code:
/home/user/MyProject/core/
/home/user/MyProject/gui/
/home/user/MyProject/backend/
/home/user/MyProject/assambly/

In den 3 ersten Projekten liegt mein Code deren benötigte externe Jars (die ich natürlich als dependency über das Repro beziehe). Im assembly-Modul liegt eig nur der assembly-discriptor. Dieser erstellt mit nun mein "Programmverzeichniss" in
Code:
/home/user/MyProject/assembly/target
.

Dort erstellt er 2 Ordner modules/ und lib/. In modules werden die von mir porgrammierten und gebuildeten jars kopiert. In lib kommen die dependencys wie hibernate.

Mein Problem:
Starte ich nun das Programm in modules findet er zwar alle Module aber nicht die libaries (wie hibernate), da der Classpath ja nicht dorthin gesetzt ist. Setze ich ihn auf lib findet er hibernate aber nicht mehr meine anderen Module.

Was ich nun brauche ist das für meine Module im grunde kein Classpath gesetzt wird (die liegen ja im selben Verzeichnis wie das Modul mit der Main und für die externen Jars müss das Classpath ../lib/ gesetzt werden.

Wenn ich den Classpath setze wird er leider für ALLE jars gesetzt. Ich hätte gern, dass Maven diese Classpaths richtig setzt (für module auf modules für alles andere auf lib). Hab keine lust manuell ne Mainfest zu erstellen und zu pflegen. Ich hoffe das geht automatisch.

Gruß
Cromm
 

KSG9|sebastian

Top Contributor
Deine Anwendung ist eine JAR-Datei, oder? Dann nimm doch einfach eine "fertige" Manifest-Datei welche als Class-Path die Werte . und ../lib/ hat. Damit musst du keine JARs separat aufnehmen und alles was im app bzw lib-Folder liegt ist im Classpath.

Gruß Sebastian
 

CrommCruach

Mitglied
Ja aktuell Starte ich das über java -jar. Später über nimmt (für windows) das ganze eine exe aber die wird im prinzip genau das selbe machen.

Das ich nur in der "Haupt"-Jar ne Mainfest brauche und Wildcarts funktionieren wusste ich nicht. Heist wenn meine Haupt-Jar auf eine 2. Modul.jar zugreift und diese dann auf Hibernate zugreift, wird der CP durch die MF in der Haupt-Jar mit abgedeckt?!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
von Spotz Maven und Spring: "Add to classpath" ? Tools - Maven, Gradle, Ant & mehr 29
L Gradle src-gen zum Classpath hinzufügen Tools - Maven, Gradle, Ant & mehr 0
P Classpath beim Ausführen eines SQL-Scripts per ANT angeben Tools - Maven, Gradle, Ant & mehr 2
G Maven Maven, Eclipse Plugins und Classpath Tools - Maven, Gradle, Ant & mehr 15
A Ant Problem mit classpath Tools - Maven, Gradle, Ant & mehr 8
C Ant target für Eclipse .classpath Tools - Maven, Gradle, Ant & mehr 6
G Classpath in Manifest? Tools - Maven, Gradle, Ant & mehr 4
N Problem mit Ant Classpath und Junit: Relative Pfade Tools - Maven, Gradle, Ant & mehr 2
E wie übergibt man classpath-variable Tools - Maven, Gradle, Ant & mehr 4
S Webstart Webstart-Anwendungen, jeweils verschiedene Cache-Pfade? Tools - Maven, Gradle, Ant & mehr 7
A Hudson/Buckminster: Verschiedene Fragen Tools - Maven, Gradle, Ant & mehr 12
D [Maven] mehrere Abhängigkeiten benutzen gleichbenannte aber verschiedene Resource Tools - Maven, Gradle, Ant & mehr 3
S Webstart Verschiedene jre-Releases auf dem Client Tools - Maven, Gradle, Ant & mehr 10
D verschiedene Versionen "builden" für Test und Lifebetrieb Tools - Maven, Gradle, Ant & mehr 14
B Einer Grafik verschiedene Regionen zuweisen Tools - Maven, Gradle, Ant & mehr 3
V bilder auf verschiedene ebenen verteilen Tools - Maven, Gradle, Ant & mehr 2
W git - Ordner für Push-Befehl sperren Tools - Maven, Gradle, Ant & mehr 2
S Webstart Anwendung temp Ordner Tools - Maven, Gradle, Ant & mehr 2
ruutaiokwu eclipse web project - warum in den "build"-ordner kompilieren ??? Tools - Maven, Gradle, Ant & mehr 10
M ant: Ordner in eine Jar einfügen Tools - Maven, Gradle, Ant & mehr 3
M Ant: Wie alle zip-Archive aus Ordner entpacken? Tools - Maven, Gradle, Ant & mehr 2
ABstraCT Applet getCodeBase() Zugriff auf darüberliegendenden Ordner ? Tools - Maven, Gradle, Ant & mehr 1
S applet ueber mehrere ordner hinweg laden Tools - Maven, Gradle, Ant & mehr 2

Ähnliche Java Themen

Neue Themen


Oben