Probleme der gängigen Ansätze
Die meisten Antworten, die Sie im Internet finden, schlagen vor, entweder die Abhängigkeit in Ihrem lokalen Repository zu installieren oder einen "System"-Bereich in der pom
und verteilen Sie die Abhängigkeit mit dem Quellcode Ihres Projekts. Aber beide Lösungen sind eigentlich fehlerhaft.
Warum Sie den "Install to Local Repo"-Ansatz nicht anwenden sollten
Wenn Sie eine Abhängigkeit in Ihrem lokalen Repository installieren, verbleibt sie dort. Ihr Distributions-Artefakt funktioniert einwandfrei, solange es Zugriff auf dieses Repository hat. Das Problem ist, dass sich dieses Repository in den meisten Fällen auf Ihrem lokalen Rechner befindet, so dass es keine Möglichkeit gibt, diese Abhängigkeit auf einem anderen Rechner aufzulösen. Ihr Artefakt von einem bestimmten Rechner abhängig zu machen, ist eindeutig kein guter Weg, die Dinge zu handhaben. Andernfalls muss diese Abhängigkeit auf jedem Rechner, der mit dem Projekt arbeitet, lokal installiert werden, was auch nicht besser ist.
Warum Sie den Ansatz des "Systemumfangs" nicht anwenden sollten
Die Jars, von denen Sie mit dem "System Scope"-Ansatz abhängig sind, werden weder in einem Repository installiert noch an Ihre Zielpakete angehängt. Deshalb wird Ihr Distributionspaket keine Möglichkeit haben, diese Abhängigkeit aufzulösen, wenn es verwendet wird. Ich glaube, das war der Grund, warum die Verwendung von System Scope sogar veraltet ist. Wie auch immer, Sie wollen sich nicht auf ein veraltetes Feature verlassen.
Die statische projektinterne Repository-Lösung
Nachdem Sie dies in Ihrem pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
für jedes Artefakt mit einer Gruppenkennung der Form x.y.z
Maven wird bei der Suche nach Artefakten den folgenden Ort in Ihrem Projektverzeichnis berücksichtigen:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Weitere Informationen hierzu finden Sie unter dieser Blogbeitrag .
Verwenden Sie Maven zur Installation im Projektarchiv
Anstatt diese Struktur von Hand zu erstellen, empfehle ich die Verwendung eines Maven-Plugins, um Ihre Jars als Artefakte zu installieren. Um also ein Artefakt in ein projektinternes Repository zu installieren unter repo
Ordner ausführen:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
Wenn Sie diesen Ansatz wählen, können Sie die Repository-Deklaration in pom
zu:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Ein Hilfsskript
Da die Ausführung des Installationsbefehls für jede Bibliothek ziemlich lästig und definitiv fehleranfällig ist, habe ich ein Hilfsskript die automatisch alle Jars aus einer lib
Ordner zu einem Projekt-Repository, wobei alle Metadaten (groupId, artifactId usw.) automatisch aus den Namen der Dateien aufgelöst werden. Das Skript gibt auch die Abhängigkeits-XML aus, die Sie per Copy-Paste in Ihr pom
.
Nehmen Sie die Abhängigkeiten in Ihr Zielpaket auf
Wenn Sie Ihr projektinternes Repository erstellt haben, haben Sie das Problem der Verteilung der Abhängigkeiten des Projekts mit seinem Quellcode gelöst, aber seitdem hängt das Zielartefakt Ihres Projekts von nicht veröffentlichten Jars ab, so dass es bei der Installation in ein Repository unauflösbare Abhängigkeiten haben wird.
Um dieses Problem zu umgehen, schlage ich vor, diese Abhängigkeiten in Ihr Zielpaket aufzunehmen. Dies können Sie entweder mit dem Montage-Plugin oder besser mit dem OneJar-Plugin . Die offizielle Dokumentation zu OneJar ist leicht verständlich.
0 Stimmen
Wenn Sie Netbeans verwenden, folgen Sie einfach diesen Schritten: [Wie installiere ich Module in das Maven-Repository mit Netbeans embedded Maven?][1] [1]: stackoverflow.com/a/339874/530153
1 Stimmen
Ich möchte darauf hinweisen, dass dieser Link stackoverflow.com/a/339874/530153 scheint zu funktionieren, um die Gläser einzeln zu installieren.