Anweisungen zur Installation auf meinem Build enthielten alles außer dem generatePom-Teil. Das scheint entscheidend zu sein.
Jason D
4
<Pfad-zu-Datei> Was bedeutet das? Wie C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar ...... oder können wir $ {project.basedir} /src/main/resources/myJar.jar
Igor Beaufils
17
Die Antwort erwähnt keine README oder dass die Gläser mitgebracht werden. Wenn das Projekt jedoch die Gläser mitbringt, können Sie das Repo genauso gut wie hier beschrieben in das Projekt einfügen. Stackoverflow.com/a/36602256/1000011 Sie benötigen keine README, da das Projekt nur so funktioniert, als ob die Gläser funktionieren waren in Maven Central ohne zusätzliche manuelle Schritte.
opticyclic
8
@opticyclic Ihr Kommentar benötigt mehr Upvotes oder diese Antwort muss bearbeitet werden. Es ist ein Rezept für eine Katastrophe für Anfänger, die nicht wissen, dass die Installation auf dem lokalen Maven-Repo nicht für alle anderen gilt.
In neuen Versionen ist diese Funktion als veraltet markiert, funktioniert aber noch und wurde noch nicht entfernt (Sie sehen nur eine Warnung im Protokoll während des Starts des Maven). In der Maven-Gruppe wird ein Problem mit https://issues.apache.org/jira/browse/MNG-6523 angesprochen (Sie können teilnehmen und beschreiben, warum diese Funktion in einigen Fällen hilfreich ist). Ich hoffe, dass diese Funktion dort bleibt!
Wenn Sie mich fragen, solange das Feature nicht entfernt wird, verwende ich dies, um die Abhängigkeit von nur einer ungezogenen JAR-Datei in meinem Projekt herzustellen, die nicht in das Repository passt. Wenn diese Funktion entfernt wird, gibt es hier viele gute Antworten, aus denen ich später auswählen kann!
Es gibt Zeiten, in denen Sie beispielsweise ein altes Glas speziell testen möchten, und ich denke, diese Antwort passt gut dazu. Es ist das, was ich brauchte. Upvoted
John Lockwood
36
So schön und einfach es auch aussieht, diese Lösung hat das Problem, dass yourJar.jar nicht in einer WAR-Datei für Ihre App enthalten ist.
Matthias
40
Die obige Lösung funktioniert nicht mehr und gibt Folgendes zurück: "'dependencies.dependency.systemPath' für xx.jar sollte nicht auf Dateien im Projektverzeichnis verweisen." Dies wurde bereits in stackoverflow.com/questions/10935135/…
sarah behandelt .ferguson
8
Sind in dieser Antwort nicht die artifactIdund groupIddie falschen Wege?
Erstens möchte ich diese Antwort einem anonymen Stack Overflow-Benutzer gutschreiben - ich bin mir ziemlich sicher, dass ich hier schon einmal eine ähnliche Antwort gesehen habe - aber jetzt kann ich sie nicht finden.
Die beste Option, um lokale JAR-Dateien als Abhängigkeit zu haben, besteht darin, ein lokales Maven-Repository zu erstellen. Ein solches Repository ist nichts anderes als eine richtige Verzeichnisstruktur mit POM-Dateien.
Für mein Beispiel: Ich habe mein Masterprojekt vor ${master_project}Ort und Unterprojekt1 ist eingeschaltet ${master_project}/${subproject1}.
Dann erstelle ich ein Maven-Repository in :
${master_project}/local-maven-repo.
In der pom-Datei in subproject1 unter ${master_project}/${subproject1}/pom.xmlmuss das Repository angegeben werden, das den Dateipfad als URL-Parameter verwendet:
Die Abhängigkeit kann wie für jedes andere Repository angegeben werden. Dies macht Ihr POM-Repository unabhängig. Sobald die gewünschte JAR beispielsweise in Maven Central verfügbar ist, müssen Sie sie nur noch aus Ihrem lokalen Repo löschen, und sie wird aus dem Standard-Repo abgerufen.
Sobald die JAR-Datei installiert ist, kann Ihr Maven-Repo in ein Code-Repository übertragen werden, und die gesamte Einrichtung ist systemunabhängig. ( Arbeitsbeispiel in GitHub ).
Ich bin damit einverstanden, dass es keine gute Praxis ist, JARs für das Quellcode-Repo zu verwenden, aber im wirklichen Leben sind schnelle und schmutzige Lösungen manchmal besser als ein vollwertiges Nexus-Repo, um eine JAR zu hosten, die Sie nicht veröffentlichen können.
@ Kai Wang Diese Lösung funktioniert viel besser! Sie sollten dies vielleicht als Antwort hinzufügen.
Lockwobr
7
Da ${project.parent.basedir}sich heutzutage nichts mehr aufzulösen scheint, habe ich ${project.basedir}/..perfekt gearbeitet.
Der Impaler
1
Ein Tipp: Bitte überprüfen Sie $ HOME / .m2 / settings.xml , Vermeiden Sie, dass "local-maven-repo" von settings / Mirrors / Mirror gespiegelt wird <mirrorOf>*</mirrorOf>.
Btpka3
125
Erstellen Sie einen neuen Ordner, beispielsweise local-maven-repoim Stammverzeichnis Ihres Maven-Projekts.
Fügen Sie einfach ein lokales Repo in <project>Ihr pom.xml:
Dies ist die einzig richtige Antwort hier, da Ihr Repo bei Verwendung von Deployment korrekt erstellt wird.
opticyclic
Würde dieser Ansatz funktionieren, wenn der Code mithilfe eines CI-Buildservers bereitgestellt wird? Es sieht so aus, als hätten automatisierte Builds keinen Zugriff auf die Abhängigkeit.
Wallace Howery
2
@ user2748659 Ja, wenn in Ihren CI-Build-Servern der Ordner local-maven-repo(in diesem Beispiel als untergeordnetes Element) in Ihrem Quellordner enthalten ist
Anthony O.
3
Diese Antwort hat bei mir funktioniert. Wenn Sie für ein freigegebenes Projekt das Repo im Projektverzeichnis haben und zur Versionskontrolle hinzufügen, wird sichergestellt, dass bei jedem, der das Projekt auscheckt, keine Abhängigkeiten fehlen. Wenn Sie viele Abhängigkeiten haben, ist ein freigegebenes Remote-Repo wahrscheinlich die bessere Lösung. Andernfalls ist es vollkommen in Ordnung, das Repo im Projektverzeichnis zu belassen.
Aquarelle
2
Beachten Sie, dass Sie dazu möglicherweise -Dpackaging = jar hinzufügen müssen. Andernfalls erhalten Sie "Artefaktinformationen sind unvollständig oder ungültig: Verpackung fehlt".
J Woodchuck
43
Ich möchte eine solche Lösung - maven-install-pluginin POM-Datei verwenden:
In diesem Fall können Sie durchführen mvn initializeund jar wird im lokalen Maven Repo installiert. Jetzt ist dieses JAR während eines beliebigen Maven-Schritts auf diesem Computer verfügbar (vergessen Sie nicht, diese Abhängigkeit wie jede andere Maven-Abhängigkeit in pom with <dependency></dependency>tag aufzunehmen). Es ist auch möglich, jar install nicht an initializestep, sondern an einen beliebigen anderen Schritt zu binden .
Dies funktioniert gut für mich, aber nur, wenn ich mvn initializevorher ausgeführt habe mvn package: Ich kann nicht mvn initialize packageoder es wird versucht, die JAR vom zentralen Repo herunterzuladen. Warum ist das? Ich dachte, es würde diese Ziele / Phasen in der richtigen Reihenfolge ausführen.
DavidS
1
Eigentlich sollten sie in der richtigen Reihenfolge ausgeführt werden. Sehen Sie sich die Liste des Standardlebenszyklus an: maven.apache.org/guides/introduction/… Sie können einen weiteren Schritt zum Binden verwenden.
sphinks
2
Ich habe jede Methode ausprobiert, aber am Ende musste ich auf diese Lösung zurückgreifen. Der Hauptgrund ist, dass ich in der Lage sein wollte, die Pakete lokal im Offline-Modus zu erstellen. Wenn ich es als Abhängigkeit von einem lokal definierten Repository deklarierte, wurde dies immer nur als ein weiteres Online-Repo betrachtet, und der Maven-Build beschwerte sich darüber, dass das Artefakt nicht bestraft wurde. Diese Lösung funktioniert in jedem Fall einwandfrei.
Mauli
2
Ich denke, es ist besser, die Clean-Phase zu verwenden , da die Initialisierung jedes Mal ausgeführt wird, wenn wir das MVN-Paket verwenden, wenn dies nicht erforderlich ist. Schließlich, wenn wir nur das jar / war generieren müssen, können wir direkt mvn clean package verwenden .
Deoxyseia
" Es ist auch möglich, jar install nicht zu binden, um den Schritt zu initialisieren, sondern jeden anderen Schritt, den Sie mögen. " Ist nicht unbedingt wahr. Wenn die Abhängigkeit noch nicht im Repo enthalten ist und eine Phase verwendet wird, die nach einer Phase folgt, in der Abhängigkeiten aufgelöst werden (z. B. compile) , schlägt der Build fehl.
GeroldBroser stellt Monica
29
<dependency><groupId>group id name</groupId><artifactId>artifact name</artifactId><version>version number</version><scope>system</scope><systemPath>jar location</systemPath></dependency>
Dies funktioniert jedoch (offensichtlich) nur auf Ihrem Computer. Für die Freigabe ist es normalerweise sinnvoll, ein geeignetes m2-Archiv (nexus / artifactory) zu verwenden, oder wenn Sie keines davon haben oder keinen lokalen Maven einrichten möchten strukturiertes Archiv und konfigurieren Sie ein "Repository" in Ihrem pom: local:
Ich erhalte die Fehlermeldung Artefakt konnte nicht installiert werden (Zugriff verweigert). Wie kann ich das lösen? @ Aurasphere
Ramzah Rehman
1
@ RamzahRehman versuchen, die Eingabeaufforderung mit Administratorrechten zu öffnen, indem Sie mit der rechten Maustaste darauf klicken und dann "Als Administrator
ausführen
9
Eine Möglichkeit besteht darin, es in Ihren eigenen Maven-Repository-Manager (z. B. Nexus) hochzuladen. Es ist sowieso empfehlenswert, einen eigenen Repository-Manager zu haben.
Eine andere nette Möglichkeit, die ich kürzlich gesehen habe, besteht darin, das Maven-Installations-Plugin in Ihren Build-Lebenszyklus aufzunehmen: Sie deklarieren im POM, die Dateien im lokalen Repository zu installieren. Es ist ein kleiner, aber kleiner Aufwand und kein manueller Schritt erforderlich.
Am Ende wechseln Sie zu Gradle. Es funktioniert nicht Wenn das lokale JAR als Abhängigkeiten definiert ist, führt maven keine Plugins aus, bevor die Abhängigkeiten aufgelöst werden. Eine manuelle Installation ist unvermeidlich. fand eine Diskussion über diese Situation: stackoverflow.com/questions/5951999/…
xinthink
7
Natürlich können Sie diesem Ordner Gläser hinzufügen. Aber vielleicht macht es nicht das, was Sie erreichen wollen ...
Ein weiterer interessanter Fall ist, wenn Sie in Ihrem Projekt private Maven-Gläser haben möchten. Möglicherweise möchten Sie die Funktionen von Maven beibehalten, um transitive Abhängigkeiten aufzulösen. Die Lösung ist ziemlich einfach.
Erstellen Sie eine Ordnerbibliothek in Ihrem Projekt
Fügen Sie die folgenden Zeilen in Ihre pom.xml-Datei ein
Ich denke, eine bessere Lösung für dieses Problem ist die Verwendung des Maven-Install-Plugins , um die Dateien bei der Installation automatisch zu installieren. So richte ich es für mein Projekt ein.
Fügen Sie zunächst den Pfad (in dem Sie die lokalen .jars speichern) als Eigenschaft hinzu.
Wenn Sie Ihr Projekt so einrichten, wird das Projekt auch dann weiter erstellt, wenn Sie es auf einen anderen Computer übertragen (vorausgesetzt, es enthält alle JAR-Dateien in dem von der Eigenschaft angegebenen Pfad local.sdk).
Für den groupIdEinsatz nur einen eindeutigen Namen , um sicherzustellen , dass es keine Konflikte.
Jetzt, wenn Sie mvn installoder mvn testlokale Gläser automatisch hinzugefügt werden.
Ich möchte einen Code freigeben, in den Sie einen Ordner voller Gläser hochladen können. Dies ist nützlich, wenn ein Anbieter kein öffentliches Repository hat und Sie viele Bibliotheken manuell hinzufügen müssen. Ich habe beschlossen, eine .bat-Datei zu erstellen, anstatt sie direkt an maven zu senden, da dies möglicherweise auf Speicherfehler zurückzuführen ist. Es wurde für eine Windows-Umgebung vorbereitet, lässt sich jedoch leicht an das Linux-Betriebssystem anpassen:
import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import java.util.jar.Attributes;import java.util.jar.JarFile;import java.util.jar.Manifest;publicclassCreateMavenRepoApp{privatestaticfinalString OCB_PLUGIN_FOLDER ="C://your_folder_with_jars";publicstaticvoid main(String[] args)throwsIOException{File directory =newFile();//get all the files from a directoryPrintWriter writer =newPrintWriter("update_repo_maven.bat","UTF-8");
writer.println("rem "+newDate());File[] fList = directory.listFiles();for(File file : fList){if(file.isFile()){String absolutePath = file.getAbsolutePath();Manifest m =newJarFile(absolutePath).getManifest();Attributes attributes = m.getMainAttributes();String symbolicName = attributes.getValue("Bundle-SymbolicName");if(symbolicName!=null&&symbolicName.contains("com.yourCompany.yourProject")){String[] parts =symbolicName.split("\\.");String artifactId = parts[parts.length-1];String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);String version = attributes.getValue("Bundle-Version");String mavenLine="call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);}}}
writer.close();}}
Führen Sie die Datei update_repo_maven.bat aus, nachdem Sie diese Hauptleitung von einer beliebigen IDE aus ausgeführt haben.
Ihr Code String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))scheint darauf hinzudeuten, dass nur benutzerdefinierte Gläser unterstützt werden. Das ist nicht das, was wir brauchen: stattdessen ein paar Gläser von Drittanbietern. Haben Sie Vorschläge, wie Sie ein Glas auf diese Weise installieren können ?
Javadba
Ich habe festgelegt Code: i am Ende eine Antwort setzen.
Javadba
3
Dies ist eine kurze Syntax für neuere Versionen:
mvn install:install-file -Dfile=<path-to-file>
Es funktioniert, als die JAR von Apache Maven erstellt wurde - der häufigste Fall. Dann enthält es eine pom.xml in einem Unterordner des META-INF-Verzeichnisses, die standardmäßig gelesen wird.
Maven-Abhängigkeiten . Dies ist die Standardeinstellung, aber ich habe in einigen Fällen festgestellt, dass dieser Bereich auch Maven explizit so einstellt, dass lokale Bibliotheken im lokalen Repository gefunden werden.
Aus irgendeinem Grund, in der Web - Anwendung Ich gebe Wartung, weder Alireza Fattahi Lösung noch Lösung JJ Roman arbeitete richtig. In beiden Fällen ist die Zusammenstellung in Ordnung (es sieht das Glas), aber die Verpackung enthält das Glas nicht im Krieg.
Die einzige Möglichkeit, es zum /src/main/webapp/WEB-INF/lib/Laufen zu bringen, bestand darin, das Glas aufzusetzen und es dann entweder mit der Lösung von Fattahis oder Roman zu kombinieren.
Beachten Sie, dass es NICHT unbedingt eine gute Idee ist, ein lokales Repo zu verwenden. Wenn dieses Projekt mit anderen geteilt wird, haben alle anderen Probleme und Fragen, wenn es nicht funktioniert, und das Glas ist nicht einmal in Ihrem Versionsverwaltungssystem verfügbar!
Obwohl das gemeinsame Repo die beste Antwort ist, ist das Einbetten des Glases besser als ein lokales Repo, wenn Sie dies aus irgendeinem Grund nicht tun können. Nur lokale Repo-Inhalte können viele Probleme verursachen, insbesondere im Laufe der Zeit.
Wenn Sie die Jars im Versionsverwaltungssystem hinzufügen, sind die Bibliotheken immer zusammen mit der Quelle verfügbar. Keine Quelle, keine Bibliotheken. Mit maven ist die Quelle möglicherweise in Ordnung, das Repository jedoch nicht verfügbar.
sarah.ferguson
@Frank ... eine Idee, wie man eine ausführbare JAR-Datei ohne externe Abhängigkeiten (Bibliotheksdateien) erstellt?
Satish Karuturi
Was bedeutet "Einbetten des Glases" für jemanden, der neu in Maven ist und nach einer Antwort auf die ursprüngliche Frage sucht?
CDock
1
In Ihrem lokalen Repository können Sie Ihr JAR installieren, indem Sie die Befehle eingeben
Sie können den folgenden Code in die Befehlszeile schreiben oder wenn Sie Eclipse Builtin Maven verwenden, klicken Sie mit der rechten Maustaste auf Projekt -> Ausführen als -> Konfigurationen ausführen ... -> Klicken Sie im linken Bereich mit der rechten Maustaste auf Maven Build -> Neue Konfiguration -> Schreiben Sie die Code in Ziele & im Basisverzeichnis: $ {project_loc: NameOfYourProject} -> Ausführen
fileStellen Sie sicher, dass Sie den Pfad basierend auf Ihrem tatsächlichen Dateipfad bearbeiten (empfohlen wird, diese externen Nicht-Maven-Jars beispielsweise in einem Ordner zu platzieren libund diesen libOrdner in Ihrem Projekt zu platzieren, um den projektspezifischen relativen Pfad zu verwenden und das Hinzufügen eines Systems zu vermeiden spezifischer absoluter Pfad.
Wenn Sie mehrere externe Gläser haben, wiederholen Sie dies einfach <execution>für andere Gläser innerhalb desselben maven-install-plugin.
Schritt 2: Nachdem Sie das maven-install-pluginwie oben in Ihrer pom.xmlDatei gezeigt konfiguriert haben , müssen Sie diese Gläser pom.xmlwie gewohnt in Ihrem verwenden :
Beachten Sie, dass maven-install-pluginnur Ihre externen Jars in Ihr lokales .m2Maven-Repository kopiert werden. Das ist es. Diese Gläser werden nicht automatisch als Maven-Abhängigkeiten zu Ihrem Projekt hinzugefügt.
Es ist ein kleiner Punkt, aber manchmal leicht zu übersehen.
Ich hatte den gleichen Fehler für eine Reihe von Abhängigkeiten in meiner pom.xml. Es stellte sich heraus, dass die Versionen der Abhängigkeiten nicht in der pom.xml angegeben und im übergeordneten Repository erwähnt wurden. Aus irgendeinem Grund wurden die Versionsdetails nicht mit diesem Repo synchronisiert. Daher habe ich die Versionen manuell mit dem Tag eingegeben und es hat wie ein Zauber funktioniert. Es wird ein wenig Zeit benötigt, um die Versionen im übergeordneten Element nachzuschlagen und hier anzugeben. Dies kann jedoch nur für die Gläser durchgeführt werden, die den Artefaktfehler anzeigen, und es funktioniert. Hoffe das hilft jemandem.
Wenn Sie Eclipse verwenden, platzieren Sie das JAR in lib /, klicken Sie mit der rechten Maustaste auf den JAR-Namen und klicken Sie auf "Zum Erstellungspfad hinzufügen". Eclipse erstellt eine "referenzierte Bibliothek" und platziert das Glas für Sie
Es hat den Import des Glases sofort im Programm für mich gelöst
Das wird den Eintrag in Eclipse's hinzufügen .classpath, aber Ihr Maven-Build mvn packagewird brocket sein, sobald Sie anfangen, diese Abhängigkeit zu verwenden, da Maven keine Definition dafür hat und es nur inpom.xml
Paul Verest
Ja, Sie haben Recht, das Paket enthält nicht das lokale Glas. Aber ich beantwortete die Frage, wie man es einem Projekt hinzufügt (auf eine Art und Weise der Sonnenfinsternis).
install-file
.Antworten:
Installieren Sie die JAR wie folgt in Ihrem lokalen Maven-Repository:
Wo sich jeder bezieht auf:
<path-to-file>
: der Pfad zur zu ladenden Datei zB →c:\kaptcha-2.3.jar
<group-id>
: die Gruppe, unter der die Datei registriert werden soll, zB →com.google.code
<artifact-id>
: der Artefaktname für die Datei zB →kaptcha
<version>
: die Version der Datei zB →2.3
<packaging>
: die Verpackung der Datei zB →jar
Referenz
install:install-file
Zielquelle
Sie können lokale Abhängigkeiten wie folgt direkt hinzufügen (wie im Build-Maven-Projekt mit Propriaterie-Bibliotheken erwähnt ):
Aktualisieren
In neuen Versionen ist diese Funktion als veraltet markiert, funktioniert aber noch und wurde noch nicht entfernt (Sie sehen nur eine Warnung im Protokoll während des Starts des Maven). In der Maven-Gruppe wird ein Problem mit https://issues.apache.org/jira/browse/MNG-6523 angesprochen (Sie können teilnehmen und beschreiben, warum diese Funktion in einigen Fällen hilfreich ist). Ich hoffe, dass diese Funktion dort bleibt!
Wenn Sie mich fragen, solange das Feature nicht entfernt wird, verwende ich dies, um die Abhängigkeit von nur einer ungezogenen JAR-Datei in meinem Projekt herzustellen, die nicht in das Repository passt. Wenn diese Funktion entfernt wird, gibt es hier viele gute Antworten, aus denen ich später auswählen kann!
quelle
artifactId
undgroupId
die falschen Wege?Erstens möchte ich diese Antwort einem anonymen Stack Overflow-Benutzer gutschreiben - ich bin mir ziemlich sicher, dass ich hier schon einmal eine ähnliche Antwort gesehen habe - aber jetzt kann ich sie nicht finden.
Die beste Option, um lokale JAR-Dateien als Abhängigkeit zu haben, besteht darin, ein lokales Maven-Repository zu erstellen. Ein solches Repository ist nichts anderes als eine richtige Verzeichnisstruktur mit POM-Dateien.
Für mein Beispiel: Ich habe mein Masterprojekt vor
${master_project}
Ort und Unterprojekt1 ist eingeschaltet${master_project}/${subproject1}
.Dann erstelle ich ein Maven-Repository in :
${master_project}/local-maven-repo
.In der pom-Datei in subproject1 unter
${master_project}/${subproject1}/pom.xml
muss das Repository angegeben werden, das den Dateipfad als URL-Parameter verwendet:Die Abhängigkeit kann wie für jedes andere Repository angegeben werden. Dies macht Ihr POM-Repository unabhängig. Sobald die gewünschte JAR beispielsweise in Maven Central verfügbar ist, müssen Sie sie nur noch aus Ihrem lokalen Repo löschen, und sie wird aus dem Standard-Repo abgerufen.
Das Letzte, was Sie tun müssen, ist, die JAR-Datei mit dem Schalter -DlocalRepositoryPath wie folgt zum lokalen Repository hinzuzufügen:
Sobald die JAR-Datei installiert ist, kann Ihr Maven-Repo in ein Code-Repository übertragen werden, und die gesamte Einrichtung ist systemunabhängig. ( Arbeitsbeispiel in GitHub ).
Ich bin damit einverstanden, dass es keine gute Praxis ist, JARs für das Quellcode-Repo zu verwenden, aber im wirklichen Leben sind schnelle und schmutzige Lösungen manchmal besser als ein vollwertiges Nexus-Repo, um eine JAR zu hosten, die Sie nicht veröffentlichen können.
quelle
${project.parent.basedir}
sich heutzutage nichts mehr aufzulösen scheint, habe ich${project.basedir}/..
perfekt gearbeitet.<mirrorOf>*</mirrorOf>
.Erstellen Sie einen neuen Ordner, beispielsweise
local-maven-repo
im Stammverzeichnis Ihres Maven-Projekts.Fügen Sie einfach ein lokales Repo in
<project>
Ihrpom.xml
:Gehen Sie dann für jedes externe JAR, das Sie installieren möchten, zum Stammverzeichnis Ihres Projekts und führen Sie Folgendes aus:
quelle
local-maven-repo
(in diesem Beispiel als untergeordnetes Element) in Ihrem Quellordner enthalten istIch möchte eine solche Lösung -
maven-install-plugin
in POM-Datei verwenden:In diesem Fall können Sie durchführen
mvn initialize
und jar wird im lokalen Maven Repo installiert. Jetzt ist dieses JAR während eines beliebigen Maven-Schritts auf diesem Computer verfügbar (vergessen Sie nicht, diese Abhängigkeit wie jede andere Maven-Abhängigkeit in pom with<dependency></dependency>
tag aufzunehmen). Es ist auch möglich, jar install nicht aninitialize
step, sondern an einen beliebigen anderen Schritt zu binden .quelle
mvn initialize
vorher ausgeführt habemvn package
: Ich kann nichtmvn initialize package
oder es wird versucht, die JAR vom zentralen Repo herunterzuladen. Warum ist das? Ich dachte, es würde diese Ziele / Phasen in der richtigen Reihenfolge ausführen.compile
) , schlägt der Build fehl.quelle
<scope>system
ist jetzt veraltet.install:install-file
dem Artefakt auf das lokale Repo und verwenden Sie es als "normale" Abhängigkeit (mit Standardbereichcompile
) oder verwenden Sie eine projektinterne Repository-Lösung .Ja, Sie können haben, aber es ist keine gute Idee.
Installieren Sie stattdessen alle diese Gläser, um Repos zu maven
Siehe auch
quelle
Der wirklich schnelle und schmutzige Weg besteht darin, auf eine lokale Datei zu verweisen:
Dies funktioniert jedoch (offensichtlich) nur auf Ihrem Computer. Für die Freigabe ist es normalerweise sinnvoll, ein geeignetes m2-Archiv (nexus / artifactory) zu verwenden, oder wenn Sie keines davon haben oder keinen lokalen Maven einrichten möchten strukturiertes Archiv und konfigurieren Sie ein "Repository" in Ihrem pom: local:
Fernbedienung:
Hierzu ist auch ein relativer Pfad mit der Variable basedir möglich:
quelle
<url>file:${basedir}</url>
stattdessen als Basis-URL verwenden.Fügen Sie Ihre eigene lokale JAR in die POM-Datei ein und verwenden Sie diese in Maven Build.
Zum Beispiel:
Fügen Sie es dann wie folgt zum POM hinzu:
quelle
Eine Möglichkeit besteht darin, es in Ihren eigenen Maven-Repository-Manager (z. B. Nexus) hochzuladen. Es ist sowieso empfehlenswert, einen eigenen Repository-Manager zu haben.
Eine andere nette Möglichkeit, die ich kürzlich gesehen habe, besteht darin, das Maven-Installations-Plugin in Ihren Build-Lebenszyklus aufzunehmen: Sie deklarieren im POM, die Dateien im lokalen Repository zu installieren. Es ist ein kleiner, aber kleiner Aufwand und kein manueller Schritt erforderlich.
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
quelle
Natürlich können Sie diesem Ordner Gläser hinzufügen. Aber vielleicht macht es nicht das, was Sie erreichen wollen ...
Wenn Sie diese Jars zum Kompilieren benötigen, überprüfen Sie diese verwandte Frage: Kann ich dem Maven 2 Build-Klassenpfad Jars hinzufügen, ohne sie zu installieren?
Verwenden Sie den Systembereich NICHT, bevor jemand dies vorschlägt.
quelle
Ein weiterer interessanter Fall ist, wenn Sie in Ihrem Projekt private Maven-Gläser haben möchten. Möglicherweise möchten Sie die Funktionen von Maven beibehalten, um transitive Abhängigkeiten aufzulösen. Die Lösung ist ziemlich einfach.
Fügen Sie die folgenden Zeilen in Ihre pom.xml-Datei ein
Öffnen Sie den Ordner .m2 / repository und kopieren Sie die Verzeichnisstruktur des Projekts, das Sie importieren möchten, in den Ordner libs .
Angenommen, Sie möchten die Abhängigkeit importieren
Gehen Sie einfach auf .m2 / repository und Sie sehen den folgenden Ordner
com / mycompany / myproject / 1.2.3
Kopieren Sie alles in Ihren libs-Ordner (wieder einschließlich der Ordner unter .m2 / repository ) und Sie sind fertig.
quelle
Befehlszeile :
quelle
Ein wichtiger Teil der Abhängigkeit ist: $ {pom.basedir} (statt nur $ {basedir})
quelle
Ich denke, eine bessere Lösung für dieses Problem ist die Verwendung des Maven-Install-Plugins , um die Dateien bei der Installation automatisch zu installieren. So richte ich es für mein Projekt ein.
Fügen Sie zunächst den Pfad (in dem Sie die lokalen .jars speichern) als Eigenschaft hinzu.
Fügen Sie dann unter
plugins
Add ein Plugin hinzu, um die Jars beim Kompilieren zu installieren.Schließlich können Sie in Abhängigkeiten die Gläser hinzufügen
Wenn Sie Ihr Projekt so einrichten, wird das Projekt auch dann weiter erstellt, wenn Sie es auf einen anderen Computer übertragen (vorausgesetzt, es enthält alle JAR-Dateien in dem von der Eigenschaft angegebenen Pfad
local.sdk
).Für den
groupId
Einsatz nur einen eindeutigen Namen , um sicherzustellen , dass es keine Konflikte.Jetzt, wenn Sie
mvn install
odermvn test
lokale Gläser automatisch hinzugefügt werden.quelle
Der bevorzugte Weg wäre, ein eigenes Remote-Repository zu erstellen.
Sehen Sie hier für Informationen, wie man es tun. Schauen Sie sich den Abschnitt " Hochladen in ein Remote-Repository " an.
quelle
Ich möchte einen Code freigeben, in den Sie einen Ordner voller Gläser hochladen können. Dies ist nützlich, wenn ein Anbieter kein öffentliches Repository hat und Sie viele Bibliotheken manuell hinzufügen müssen. Ich habe beschlossen, eine .bat-Datei zu erstellen, anstatt sie direkt an maven zu senden, da dies möglicherweise auf Speicherfehler zurückzuführen ist. Es wurde für eine Windows-Umgebung vorbereitet, lässt sich jedoch leicht an das Linux-Betriebssystem anpassen:
Führen Sie die Datei update_repo_maven.bat aus, nachdem Sie diese Hauptleitung von einer beliebigen IDE aus ausgeführt haben.
quelle
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
scheint darauf hinzudeuten, dass nur benutzerdefinierte Gläser unterstützt werden. Das ist nicht das, was wir brauchen: stattdessen ein paar Gläser von Drittanbietern. Haben Sie Vorschläge, wie Sie ein Glas auf diese Weise installieren können ?Dies ist eine kurze Syntax für neuere Versionen:
Es funktioniert, als die JAR von Apache Maven erstellt wurde - der häufigste Fall. Dann enthält es eine pom.xml in einem Unterordner des META-INF-Verzeichnisses, die standardmäßig gelesen wird.
Quelle: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
quelle
Schauen Sie sich auch ...
Maven-Abhängigkeiten . Dies ist die Standardeinstellung, aber ich habe in einigen Fällen festgestellt, dass dieser Bereich auch Maven explizit so einstellt, dass lokale Bibliotheken im lokalen Repository gefunden werden.
quelle
Aus irgendeinem Grund, in der Web - Anwendung Ich gebe Wartung, weder Alireza Fattahi Lösung noch Lösung JJ Roman arbeitete richtig. In beiden Fällen ist die Zusammenstellung in Ordnung (es sieht das Glas), aber die Verpackung enthält das Glas nicht im Krieg.
Die einzige Möglichkeit, es zum
/src/main/webapp/WEB-INF/lib/
Laufen zu bringen, bestand darin, das Glas aufzusetzen und es dann entweder mit der Lösung von Fattahis oder Roman zu kombinieren.quelle
Beachten Sie, dass es NICHT unbedingt eine gute Idee ist, ein lokales Repo zu verwenden. Wenn dieses Projekt mit anderen geteilt wird, haben alle anderen Probleme und Fragen, wenn es nicht funktioniert, und das Glas ist nicht einmal in Ihrem Versionsverwaltungssystem verfügbar!
Obwohl das gemeinsame Repo die beste Antwort ist, ist das Einbetten des Glases besser als ein lokales Repo, wenn Sie dies aus irgendeinem Grund nicht tun können. Nur lokale Repo-Inhalte können viele Probleme verursachen, insbesondere im Laufe der Zeit.
quelle
In Ihrem lokalen Repository können Sie Ihr JAR installieren, indem Sie die Befehle eingeben
Folgen Sie diesem nützlichen Link , um dasselbe auf der Website von mkyoung zu tun. Sie können auch die Maven-Anleitung überprüfen
quelle
Rufen Sie den folgenden Befehl auf, um jar von Drittanbietern zu installieren
quelle
Sie können den folgenden Code in die Befehlszeile schreiben oder wenn Sie Eclipse Builtin Maven verwenden, klicken Sie mit der rechten Maustaste auf Projekt -> Ausführen als -> Konfigurationen ausführen ... -> Klicken Sie im linken Bereich mit der rechten Maustaste auf Maven Build -> Neue Konfiguration -> Schreiben Sie die Code in Ziele & im Basisverzeichnis: $ {project_loc: NameOfYourProject} -> Ausführen
Wo sich jeder bezieht auf:
<Pfad zur Datei>: Der Pfad zur zu ladenden Datei, z. B. -> c: \ kaptcha-2.3.jar
<Gruppen-ID>: Die Gruppe, unter der die Datei registriert werden soll, z. B. -> com.google.code
<Artefakt-ID>: Der Artefaktname für die Datei, z. B. -> kaptcha
<Version>: Die Version der Datei, zB -> 2.3
<Packaging>: Das Packen der Datei, zB -> jar
quelle
Schritt 1: Konfigurieren Sie das
maven-install-plugin
mit dem Zielinstall-file
in Ihrempom.xml
file
Stellen Sie sicher, dass Sie den Pfad basierend auf Ihrem tatsächlichen Dateipfad bearbeiten (empfohlen wird, diese externen Nicht-Maven-Jars beispielsweise in einem Ordner zu platzierenlib
und diesenlib
Ordner in Ihrem Projekt zu platzieren, um den projektspezifischen relativen Pfad zu verwenden und das Hinzufügen eines Systems zu vermeiden spezifischer absoluter Pfad.Wenn Sie mehrere externe Gläser haben, wiederholen Sie dies einfach
<execution>
für andere Gläser innerhalb desselbenmaven-install-plugin
.Schritt 2: Nachdem Sie das
maven-install-plugin
wie oben in Ihrerpom.xml
Datei gezeigt konfiguriert haben , müssen Sie diese Gläserpom.xml
wie gewohnt in Ihrem verwenden :Beachten Sie, dass
maven-install-plugin
nur Ihre externen Jars in Ihr lokales.m2
Maven-Repository kopiert werden. Das ist es. Diese Gläser werden nicht automatisch als Maven-Abhängigkeiten zu Ihrem Projekt hinzugefügt.Es ist ein kleiner Punkt, aber manchmal leicht zu übersehen.
quelle
Ich hatte den gleichen Fehler für eine Reihe von Abhängigkeiten in meiner pom.xml. Es stellte sich heraus, dass die Versionen der Abhängigkeiten nicht in der pom.xml angegeben und im übergeordneten Repository erwähnt wurden. Aus irgendeinem Grund wurden die Versionsdetails nicht mit diesem Repo synchronisiert. Daher habe ich die Versionen manuell mit dem Tag eingegeben und es hat wie ein Zauber funktioniert. Es wird ein wenig Zeit benötigt, um die Versionen im übergeordneten Element nachzuschlagen und hier anzugeben. Dies kann jedoch nur für die Gläser durchgeführt werden, die den Artefaktfehler anzeigen, und es funktioniert. Hoffe das hilft jemandem.
quelle
In Apache Maven 3.5.4 musste ich ein doppeltes Anführungszeichen hinzufügen. Ohne doppeltes Zitat hat es bei mir nicht funktioniert.
Beispiel: mvn install: install-file "-Dfile = Speicherort der JAR-Datei" "-DgroupId = Gruppen-ID" "-DartifactId = Artefakt-ID" "-Dversion = Version" "-Dpackaging = Pakettyp"
quelle
quelle
DIESE ANTWORT IST NUR FÜR ECLIPSE-BENUTZER:
Wenn Sie Eclipse verwenden, platzieren Sie das JAR in lib /, klicken Sie mit der rechten Maustaste auf den JAR-Namen und klicken Sie auf "Zum Erstellungspfad hinzufügen". Eclipse erstellt eine "referenzierte Bibliothek" und platziert das Glas für Sie
Es hat den Import des Glases sofort im Programm für mich gelöst
quelle
.classpath
, aber Ihr Maven-Buildmvn package
wird brocket sein, sobald Sie anfangen, diese Abhängigkeit zu verwenden, da Maven keine Definition dafür hat und es nur inpom.xml