Probleme populärer Ansätze
Die meisten Antworten, die Sie im Internet finden, empfehlen Ihnen, entweder die Abhängigkeit in Ihrem lokalen Repository zu installieren oder einen "System" -Bereich im anzugeben pom
und die Abhängigkeit mit der Quelle Ihres Projekts zu verteilen. Beide Lösungen sind jedoch fehlerhaft.
Warum Sie den Ansatz "Auf lokalem Repo installieren" nicht anwenden sollten
Wenn Sie eine Abhängigkeit in Ihrem lokalen Repository installieren, bleibt diese dort. Ihr Distributionsartefakt funktioniert einwandfrei, solange es Zugriff auf dieses Repository hat. Das Problem ist, dass sich dieses Repository in den meisten Fällen auf Ihrem lokalen Computer befindet. Daher gibt es keine Möglichkeit, diese Abhängigkeit von einem anderen Computer aufzulösen. Es ist keine Möglichkeit, Ihr Artefakt von einer bestimmten Maschine abhängig zu machen. Andernfalls muss diese Abhängigkeit lokal auf jedem Computer installiert werden, der mit diesem Projekt arbeitet, was nicht besser ist.
Warum Sie den "System Scope" -Ansatz nicht anwenden sollten
Die Jars, auf die Sie beim "System Scope" -Ansatz angewiesen sind, werden weder in einem Repository installiert noch an Ihre Zielpakete angehängt. Aus diesem Grund kann Ihr Distributionspaket diese Abhängigkeit bei Verwendung nicht auflösen. Ich glaube, das war der Grund, warum die Nutzung des Systemumfangs sogar veraltet war. Auf jeden Fall möchten Sie sich nicht auf eine veraltete Funktion verlassen.
Die statische In-Project-Repository-Lösung
Nachdem Sie dies in Ihre 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 Gruppen-ID des Formulars nimmt x.y.z
Maven bei der Suche nach Artefakten den folgenden Speicherort in Ihrem Projektverzeichnis auf:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
Um mehr darüber zu erfahren, können Sie diesen Blog-Beitrag lesen .
Verwenden Sie Maven, um das Projekt-Repo zu installieren
Anstatt diese Struktur von Hand zu erstellen, empfehle ich, ein Maven-Plugin zu verwenden, um Ihre Gläser als Artefakte zu installieren. Um ein Artefakt in einem projektinternen Repository unter repo
Ordner zu installieren, führen Sie Folgendes aus:
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 vereinfachen in pom
:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
Ein Hilfsskript
Da das Ausführen des Installationsbefehls für jede Bibliothek etwas ärgerlich und definitiv fehleranfällig ist, habe ich ein Dienstprogramm-Skript erstellt, das automatisch alle Jars aus einem lib
Ordner in ein Projekt-Repository installiert und gleichzeitig alle Metadaten (groupId, artefaktId usw.) von automatisch auflöst Namen von Dateien. Das Skript druckt auch die XML-Abhängigkeiten aus, die Sie kopieren und in Ihre einfügen können pom
.
Fügen Sie die Abhängigkeiten in Ihr Zielpaket ein
Wenn Sie Ihr projektinternes Repository erstellt haben, haben Sie ein Problem beim Verteilen der Abhängigkeiten des Projekts mit seiner Quelle gelöst. Seitdem hängt das Zielartefakt Ihres Projekts jedoch von nicht veröffentlichten Jars ab es zu einem Repository wird es unlösbare Abhängigkeiten haben.
Um dieses Problem zu lösen, schlage ich vor, diese Abhängigkeiten in Ihr Zielpaket aufzunehmen. Dies können Sie entweder mit dem Assembly Plugin oder besser mit dem OneJar Plugin tun . Die offizielle Dokumentation zu OneJar ist leicht zu verstehen.