Ich möchte, dass sich das JAR in einer Drittanbieter-Bibliothek in der Quellcodeverwaltung befindet und über den relativen Pfad aus der Datei pom.xml mit ihm verknüpft ist.
Wenn Sie dies wirklich möchten (verstehen Sie, wenn Sie kein Unternehmens-Repository verwenden können), würde ich empfehlen, ein für das Projekt lokales "Datei-Repository" zu verwenden und keinesystem
Abhängigkeit mit Gültigkeitsbereich zu verwenden. Der system
Umfang sollte vermieden werden. Solche Abhängigkeiten funktionieren in vielen Situationen nicht gut (z. B. bei der Montage). Sie verursachen mehr Probleme als Vorteile.
Deklarieren Sie stattdessen ein lokales Repository für das Projekt:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
Installieren Sie dort Ihre Drittanbieter-Bibliothek install:install-file
mit dem folgenden localRepositoryPath
Parameter:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
Update: Es scheint, dass bei Verwendung der Version 2.2 des Plugins install:install-file
ignoriert wird localRepositoryPath
. Es funktioniert jedoch mit Version 2.3 und höher des Plugins. Verwenden Sie also den vollständig qualifizierten Namen des Plugins, um die Version anzugeben:
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
Dokumentation zum Maven-Install-Plugin
Deklarieren Sie es schließlich wie jede andere Abhängigkeit (jedoch ohne den system
Umfang):
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
Dies ist meiner Meinung nach eine bessere Lösung als die Verwendung eines system
Bereichs, da Ihre Abhängigkeit wie ein guter Bürger behandelt wird (z. B. wird sie in eine Versammlung aufgenommen und so weiter).
Jetzt muss ich erwähnen, dass der "richtige Weg", um mit dieser Situation in einem Unternehmensumfeld umzugehen (hier möglicherweise nicht der Fall), die Verwendung eines Unternehmensrepositorys wäre.
localRepositoryPath
...basedir/./my-local-repo
eine Single.
verwendet habe.Verwenden des
system
Bereichs.${basedir}
ist das Verzeichnis deines Poms.Es ist jedoch ratsam, dass Sie Ihr JAR im Repository installieren und nicht an das SCM übergeben - schließlich versucht Maven dies zu beseitigen.
quelle
Dies ist eine weitere Methode zusätzlich zu meiner vorherigen Antwort unter Kann ich dem Maven 2-Build-Klassenpfad Jars hinzufügen, ohne sie zu installieren?
Dies wird das Limit bei Verwendung von Builds mit mehreren Modulen umgehen, insbesondere wenn auf die heruntergeladene JAR in untergeordneten Projekten außerhalb des übergeordneten Projekts verwiesen wird. Dies reduziert auch den Einrichtungsaufwand, indem die POM- und SHA1-Dateien als Teil des Builds erstellt werden. Außerdem kann sich die Datei an einer beliebigen Stelle im Projekt befinden, ohne die Namen zu korrigieren oder der Maven-Repository-Struktur zu folgen.
Dies verwendet das Maven-Install-Plugin. Damit dies funktioniert, müssen Sie ein Projekt mit mehreren Modulen einrichten und ein neues Projekt haben, das den Build darstellt, um Dateien im lokalen Repository zu installieren und sicherzustellen, dass eines das erste ist.
Ihr Multi-Modul-Projekt pom.xml würde folgendermaßen aussehen:
Die Datei repository / pom.xml enthält dann die Definitionen zum Laden der JARs, die Teil Ihres Projekts sind. Im Folgenden finden Sie einige Ausschnitte aus der Datei pom.xml.
Die POM-Verpackung verhindert, dass Tests durchgeführt oder JAR-Dateien kompiliert oder generiert werden. Das Fleisch der Datei pom.xml befindet sich im Build-Bereich, in dem das Maven-Install-Plugin verwendet wird.
Um mehr als eine Datei zu installieren, fügen Sie einfach weitere Ausführungen hinzu.
quelle
Das funktioniert bei mir: Nehmen wir an, ich habe diese Abhängigkeit
Fügen Sie dann den Klassenpfad für Ihre Systemabhängigkeit manuell wie folgt hinzu
Vollständige Konfiguration:
quelle
Ich habe zuvor über ein Muster dafür geschrieben.
Es ist der von Pascal vorgeschlagenen Lösung sehr ähnlich, verschiebt jedoch alle diese Abhängigkeiten in ein dediziertes Repository-Modul, sodass Sie es nicht überall wiederholen müssen, wenn die Abhängigkeit verwendet wird, wenn es sich um einen Build mit mehreren Modulen handelt.
quelle
Fügen Sie dies grundsätzlich zur Datei pom.xml hinzu:
quelle
wir haben auf gradle umgestellt und das funktioniert in gradle viel besser;). Wir geben nur einen Ordner an, in den wir Gläser für vorübergehende Situationen wie diese ablegen können. Wir haben immer noch die meisten unserer Gläser im typischen Abschnitt zum Abhängigkeitsmanagement definiert (dh das gleiche wie bei maven). Dies ist nur eine weitere Abhängigkeit, die wir definieren.
Im Grunde genommen können wir jetzt einfach jedes gewünschte JAR zum vorübergehenden Testen in unser lib-Verzeichnis ablegen, wenn es sich nicht irgendwo in einem Maven-Repository befindet.
quelle
Eine kleine Ergänzung zu der von Pascal veröffentlichten Lösung
Als ich dieser Route folgte, wurde bei der Installation von ojdbc jar ein Fehler in maven angezeigt.
Nach dem Hinzufügen von -DpomFile wurde das Problem behoben.
quelle
Sie können Eclipse verwenden, um eine ausführbare Jar: Export / Runable Jar-Datei zu generieren
quelle