Eigene Bibliotheken in Projekte Verwenden

MiMa

Top Contributor
Um meine Bibliothek in eigene Programme zu verwenden erstelle ich mittels Maven-Package eine JAR Datei.

Im JavaFX Programm nutze ich ebenfalls Maven und füge die JAR Datei unter Liebraris hinzu.
Jedesmal wenn ich im Projekt Maven-Clean ausführe, wird die JAR Bibliothek nicht mehr unterstützt?
Es in den Libraries ist diese zwar noch enthalten, wird aber grau?
Ich habe das Gefühl, wenn Maven-Celan ausgeführt wird, das dann die Bibliotheken, welche als JAR eingebunden wurden gelöst werden???
Um diese zu verwenden muss ich das jedesmal wieder neu einbinden.

Ich muss das dann auch zweimal machen, weil nach dem ersten einbinden die JAR Bibliothek doch nicht übernommen wurde???

Gibt es da einen anderen Weg um meine eigene Bibliotheken in Maven Projekte zu integrieren?
Danke
 

KonradN

Super-Moderator
Mitarbeiter
Im JavaFX Programm nutze ich ebenfalls Maven und füge die JAR Datei unter Liebraris hinzu.
Wenn Du Maven nutzt: Wo fügst Du die Jar Datei hinzu? Das hört sich nicht richtig an. In Maven werden Abhängigkeiten in der pom.xml unter dependencies eingetragen.

Jedes Maven Projekt wird durch groupId, ArchetypeId und Version identifiziert. Du kannst also die Details der Library in dem anderen Projekt angeben. Damit es eingebunden werden kann, musst Du aber einmal das Ziel install laufen lassen - das trägt dann alles im local Repository ein.
 

MiMa

Top Contributor
Das JAR füge ich hinzu unter:
Project Structure / Libraries
Da sit ein + Button und dann JAVA.
Ich kann dann den Pfad das JAR dort angeben und dann fragt mich IJ zum Module ab und das wars dann.
Allerding stellt sich mir gerade die Frage ob ich das wirklich so weiter führen soll?

In der Bibliothek habe ich JUnit und Tests deklariert. Wenn ich die Bibliothek als JAR schreibe, dann wird auch das JUnit mit in das JAR File gepackt und im Projekt sollen dann die UnitTest integriert werden!?!
Ich weis nicht ob da so richtig ist??? Fühlt sich für mich nicht so an?
 

KonradN

Super-Moderator
Mitarbeiter
Du fügst direkt in IntelliJ keine Abhängigkeiten hinzu. Abhängigkeiten musst Du in Maven definieren, also schlicht und einfach in der pom.xml.
 

MiMa

Top Contributor
Ich habe das schon verstanden das in der POM die abhängigkeiten deklariert werden.
Aber für die JAR gibt es kein depencity bei Maven. Das is eine JAR die ich selbst erstellt habe, also eigene Methoden und so.
Soweit ich weis kann ich kein eignes JAR in der POM deklarieren?
 

LimDul

Top Contributor
Ich habe das schon verstanden das in der POM die abhängigkeiten deklariert werden.
Aber für die JAR gibt es kein depencity bei Maven. Das is eine JAR die ich selbst erstellt habe, also eigene Methoden und so.
Soweit ich weis kann ich kein eignes JAR in der POM deklarieren?
Du erstellst das mit Maven, dementsprechend hat das auch eine groupId, eine artefactId und eine Version. Genau die trägst du dann in deinem anderen Projekt ein und hast damit die Abhängigkeit drin. Das funktioniert :) Du musst nur bei bei dem Projekt, was du nutzen willst mvn install ausführen, damit es in deinem loklen Repository landet.

Maven funktioniert so, wenn du eine Abhängigkeit einträgst, wird zuerst lokal bei dir auf der Platte (in der Regel %userdir%/.m2) geschaut, ob dort das jar liegt. Wenn es dort nicht liegt dann erst wird geschaut, ob es das in maven central im netz gibt und da runtergeladen. Das heißt, du musst nur dein jar "sauber" in dein lokales Repository bekommen und dann kannst du es ganz normal nutzen. Und das sauber reinbekommen macht mvn install
 

Oneixee5

Top Contributor
Du kannst beides
  • also ein lokales JAR als Abhängigkeit zu definieren - nicht empfohlen!
  • ein lokales JAR in deinem lokalem Repository installieren, und dann ganz normal einbinden, wie jede andere Abhängigkeit.

Installieren:
Bash:
$ mvn install:install-file \
    -Dfile=HelloWorld.jar \
    -DgroupId=my.playground \
    -DartifactId=hello-world \
    -Dversion=1.0 \
    -Dpackaging=jar

Verwenden:
Code:
<dependency>
    <groupId>my.playground</groupId>
    <artifactId>hello-world</artifactId>
    <version>1.0</version>
</dependency>

Falls das Project, welches für das JAR verantwortlich ist, ebenfalls ein Maven-Projekt ist, dann kannst du das JAR einfach mit:
Code:
$ mvn install
deinem lokalen Repository hinzufügen. Dann musst du aber für eine Versionierung sorgen und bei den Abhängigkeiten beachten.
 

KonradN

Super-Moderator
Mitarbeiter
Einfach einmal die ganzen Grundlagen Schritt für Schritt:

a) Wenn Du ein Maven Projekt hast, dann legst Du in dem Projekt fest, wie Das Projekt zu identifizieren ist. (groupId, artefactId und version)

b) Maven bezieht Abhängigkeiten aus einem Repository. Per default sind erst einmal zwei Repositories definiert: 1. Maven Central - da finden sich sehr viele - meist freie - Libraries und 2. Maven Local Repository - das ist ein Verzeichnis auf dem System, per default im Homeverzeichnis das .m2/repository Verzeichnis.

c) Wenn Du in einem Maven Projekt das Ziel install ausführst, dann wird das, was gebaut wurde, im local reposititory installiert. Das bedeutet, dass das jar File und das pom File nach ~/.m2/repository/<groupId>/<artefactId>/<version>/ kopiert wird.

==> Somit reicht es, wenn Du bei deinem Library Projekt ein mvn install ausführst. Danach steht es anderen Projekten (von Dir) zur Verfügung.

d) IntelliJ und Maven - IntelliJ hat eine eigene Projektverwaltung mit Projekt und mehreren Modulen. Diese hast Du auch, wenn Du ein Maven Projekt öffnest. Das Maven Projekt wird ausgewertet und alles andere dann aufgebaut. Du solltest aber auf keinen Fall das IntelliJ Projekt manuell anpassen. Denn Du willst doch mit Maven arbeiten! Alle Änderungen werden daher ausschließlich in der pom.xml durchgeführt und im Anschluss musst Du IntelliJ sagen, dass es das aktualisieren soll (Button im Maven Toolfenster als auch ein neue Button, der mitten über dem Editor auftauchen sollte).
 

KonradN

Super-Moderator
Mitarbeiter
Generell kann man übrigens auch noch etwas mehr tricksen wenn man es will. Hier hast Du ja die Abhängigkeit in einem eigenen Projekt. Aber angenommen du hast das nicht. Und das Projekt sollen auch andere in einem Team verwenden können oder so?

Man kann in der pom.xml ein Repository hinzu fügen und das kann ein Verzeichnis im Projekt sein. Das wäre dann ein Eintrag wie:
XML:
    <repositories>
        <repository>
            <id>local-repository</id>
            <url>file:///${project.basedir}/repository</url>
        </repository>
    </repositories>

Das definiert direkt im Projekt ein Verzeichnis repository, das als Repository genutzt werden soll. Dort lassen sich dann beliebige jar Dateien, die nicht in einem zentralen Repository verfügbar sind, hinzufügen (Das entspricht dann einem Aufruf ähnlich wie @Oneixee5 in #7 gezeigt hat)

Sowas dokumentiere ich dann aber oft auch - also z.B. mit
Code:
Maven Befehle um Repository aufzubauen:
=======================================

Die Befehle einfach in IntelliJ über das Maven Tool-Fenster und Knopf "Execute Maven Goal" ausführen.

Achtung:
Pfade müssen angepasst werden!

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=C:\Projects\SomeProject\src\lib\someJar.jar -DgroupId=de.mygroupid -DartifactId=myartefact1 -Dversion=0.0.1-local -Dpackaging=jar -DlocalRepositoryPath=C:\Projects\SomeProject\repository
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=C:\Projects\SomeProject\src\lib\some-other-jar-1.0.jar -DgroupId=de.mygroupid -DartifactId=myartefact2 -Dversion=1.0-local -Dpackaging=jar -DlocalRepositoryPath=C:\Projects\SomeProject\repository

Die Version ergänze ich bei sowas gerne mit -local. Das ist ein Vorgehen, das man machen kann aus technischer Sicht, aber man sollte dazu sehr gute Gründe haben. Und wichtig ist: So Projekte werden dann nicht veröffentlicht! Also nicht auf andere öffentliche Maven Repositories schieben! Transitive Abhängigkeiten können hier ja nicht funktionieren!
 

MiMa

Top Contributor
Vielen Dank, das hat gut funktioniert.
Wieder mal was tolles gelernt.

Grundsätzlich hatte ich mir überlegt in dem Bibliotheken Projekt, welches Git und Maven enthält Klassen und Methoden zu entwicklen und mit JUnit Test soweit Testen bis die Fehler möglichst gut reduziert sind.

Dann, über die Abhängigkeit anderen Projekten die Klassen und Methoden einbinden.
Im JavaFX Projekt welches ich gerade erstelle, ist kein JUnit installiert und möchte auch eigentlich dort keine Tests schreiben.

Aber durch die Einbindung meiner Bibliothek scheint das doch zu benötigen?
Error occurred during initialization of boot layer
java.lang.module.FindException: Module org.junit.jupiter.api not found, required by de.michaelmadej.bibliotheken

Process finished with exit code 1
Werden eigentlich die Tests mit in das JAR gepackt?

ich habe folgende Verzeichnis:
src
---main
------java
---------de.mm.bibliotheken
---------TestCode
------ressources
 

KonradN

Super-Moderator
Mitarbeiter
Die Tests sind separat, also nicht in src/main/java sondern in src/test/java!

Die Abhängigkeit zu JUnit / Mockito / <Was auch immer du nutzt> erfolgt mit dem scope test, also z.B. so in der Form:
XML:
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

Damit wird das keine transitive Abhängigkeit für produktiven Code sondern rein eine Abhängigkeit für die Tests.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G eigene Library In NetBeans 11.1 IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
beatles Eclipse Methoden in eigene Klassen exportieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 11
R NetBeans Eigene Komponenten in GUI einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
F Eclipse Eigene Java Bibliothek erstellen/einbinden (ECLIPSE) IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
J NetBeans GUI Builder und eigene ActionListener Klasse IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
M Eclipse eigene Kürzel IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
Java.getSkill() Eclipse Strg Leertaste nur eigene Methoden anzeigen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
Kessi Maven assembly vergisst eigene Klassen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
M Netbeans eigene Componenten einfügen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
M Eigene Jar-Dateien zu Netbeans-Projekt hinzufügen? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
K Eclipse 3.2 : Eigene visuelle Klasse verursacht Parse Error IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
C NetBeans - eigene Komponenten in Palette einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
R Newbie : Eclipse 3.01 Zwei ext.JArs in eigene einbinden ! IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
M Netbeans nutzt veraltete Bibliotheken für JAX-WS IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
T Eclipse Wo sollte ich Bibliotheken für mein Projekt unterbringen? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 13
V Problem mit einbinden externer Bibliotheken [NetBeans] IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
C Bibliotheken mit ins Jar packen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
V Wicket oder andere bibliotheken einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
emge Unbenutzte Bibliotheken erkennen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
F Projekte auf Github hochladen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
MiMa Nebtbeans Projekte nach IntelliJ IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
F alle Eclipse Projekte auf git hochladen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
mrBrown IntelliJ 2020.1 - Maven Projekte nicht ausführbar IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
S Wie importiere ich am besten grosse Projekte in Eclipse am Beispiel von Apache ANT IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
O Eclipse aufräumen Java Projekte sortieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
J NetBeans Dokumentation anderer Projekte IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
L NetBeans Projects: nur Projekte aus Workspace anzeigen wie? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
L Eclipse Eclipse - Projekte "mischen" Dynamisches Web Projekt + Maven IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
P Eclipse - Projekte auf mehreren Computern IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 26
H Eclipse Projekte außerhalb Workspace direkt bearbeiten IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
M Eclipse Projekt in mehrere Projekte aufspalten RMI IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
KrokoDiehl Eclipse Projekte per Skript erzeugen? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
D NetBeans projekte kopieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
T Alle Projekte sind verschwunden !! IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
Z Eclipse neue Projekte einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
Houly Eclipse Projekte in NetBeans öffnen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
H Eclipse erkennt Projekte nicht IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
B Projekte in NetBeans / ausführbare Datei erstellen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
T C++ Projekte in NetBeans IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
W Eclipse Projekte in Netbeans 6.1 importieren? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
tfa Build-Skript für Eclipse-Projekte IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 10
C Eclipse-Projekte übersichtlicher machen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
S Zei Projekte in Eclipse gleichzeitig laufen lassen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
H Sun Java Studio Enterprise 8.1 nur Ant Projekte? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
L Eclipse: Zusammenspiel einzelner Files und Projekte IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 11
E kann Projekte in Eclipse nicht öffnen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
H Projekte öffnen ? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
R Eclipse: Projekte wieder auflisten lassen. IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
B Netbeans 3.5 und 3.6 - Projekte im Netzwerk verwalten IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4

Ähnliche Java Themen


Oben