Es sind meine ersten Tage, in denen ich Maven lernte, und ich kämpfe immer noch mit den Grundlagen. Ich habe eine externe .jar-Datei (nicht in den öffentlichen Repos verfügbar), auf die ich in meinem Projekt verweisen muss, und ich versuche herauszufinden, was meine beste Option ist.
Es ist ein kleines Projekt ohne zentrales Repository für Bibliotheken. Es muss sich also entweder um ein lokales Repository handeln (irgendwie zur Quellcodeverwaltung hinzugefügt, weiß nicht, ob es so funktionieren soll) oder die .jar-Datei muss gespeichert werden Datenträger außerhalb eines formalen Repositorys.
1) Was ist meine beste Option, um die .jar-Datei mit maven zu den Referenzen meines Projekts hinzuzufügen, da ich möchte, dass sowohl das Projekt als auch die Bibliothek in der Quellcodeverwaltung sind?
2) Ich kann immer noch nicht scheinen, dass Eclipse die Abhängigkeit sieht. Ich habe es manuell zu dem Abschnitt des Pom hinzugefügt, und es wird in m2Eclipse in der Liste Abhängigkeiten angezeigt. mvn compile und mvn package sind beide erfolgreich, aber das Programm auszuführen führt zu:
Exception in thread "main" Java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type
Dies ist nach dem Bearbeiten des POMs wie folgt:
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
Soll ich mvn install: install-file ausführen, obwohl ich die pom.xml bereits wie oben bearbeitet habe?
Vielen Dank!
Ich denke, Sie sollten mvn install:install-file
verwenden, um Ihr lokales Repository mit den Bibliotheksgläsern zu füllen. Dann sollten Sie den Geltungsbereich von System zu Kompilieren ändern.
Wenn Sie mit maven anfangen, empfehle ich, maven direkt und nicht IDE - Plugins zu verwenden, da dies eine zusätzliche Komplexitätsebene ergibt.
Haben Sie die erforderlichen Gläser in Ihren Klassenpfad gestellt, um den Fehler anzuzeigen? Wenn Sie Typen aus der Bibliothek verwenden, müssen Sie auch zur Laufzeit darauf zugreifen können. Das hat nichts mit Maven selbst zu tun.
Ich verstehe nicht, warum Sie die Bibliothek der Quellcodeverwaltung unterziehen wollen - sie ist für Quellcode und nicht für Binärdosen.
Sie können ein In-Project-Repository erstellen, sodass Sie nicht jedes Mal run mvn install:install-file
en müssen, wenn Sie an einem neuen Computer arbeiten
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.basedir}/libs</url>
</repository>
<dependency>
<groupId>dropbox</groupId>
<artifactId>dropbox-sdk</artifactId>
<version>1.3.1</version>
</dependency>
/groupId/artifactId/version/artifactId-verion.jar
detail lesen Sie diesen Blogeintrag
http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/
Das Maven-Handbuch sagt zu tun dies:
mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar
Dies kann leicht mit dem <scope> -Element innerhalb des <dependency> -Elements erreicht werden.
Zum Beispiel:
<dependencies>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
Referenz: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
update Wir haben seit kurzem unseren eigenen Nexus-Server installiert, viel einfacher und sauberer.
In unserer Firma hatten wir einige Gläser, die wir häufig verwendeten, aber weder in Maven-Repositories gehostet wurden, noch wollten wir sie im lokalen Lager haben. Wir haben ein sehr einfaches mvn (öffentliches) Repo auf Github erstellt (Sie können es jedoch auf einem beliebigen Server oder lokal hosten):
note dass dies nur für die Verwaltung einiger seltener JAR-Dateien ideal ist
Repo auf GitHub erstellen:https://github.com/<user_name>/mvn-repo/
Fügen Sie das Repository in pom.xml hinzu
(Beachten Sie, dass die vollständige Pfad-RAW-Datei sich etwas vom Repo-Namen unterscheidet.)
<repository>
<id>project-common</id>
<name>Project Common</name>
<url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
</repository>
Hinzufügen einer Abhängigkeit zum Host (Github oder privater Server)
ein. Alles, was Sie wissen müssen, ist, dass Dateien in dem von @glitch genannten Muster gespeichert werden/groupId/artifactId/version/artifactId-version.jar
b. Erstellen Sie auf Ihrem Host die Ordner, die diesem Muster entsprechen.
Wenn Sie über eine JAR-Datei mit dem Namen service-sdk-0.0.1.jar
verfügen, erstellen Sie den Ordner service-sdk/service-sdk/0.0.1/
und legen die Jar-Datei service-sdk-0.0.1.jar
dort ab.
c. Testen Sie es, indem Sie versuchen, das Glas von einem Browser herunterzuladen (in unserem Fall: https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Fügen Sie der pom.xml-Datei eine Abhängigkeit hinzu:
<dependency>
<groupId>service-sdk</groupId>
<artifactId>service-sdk</artifactId>
<version>0.0.1</version>
</dependency>
Genießen
Verwenden Sie nicht systemPath. Im Gegensatz zu dem, was die Leute hier gesagt haben, können Sie eine externe Dose in einem Ordner unter Ihrem ausgecheckten Projektverzeichnis ablegen und Port Maven finden es wie andere Abhängigkeiten. Hier sind zwei entscheidende Schritte:
Es ist ziemlich einfach und Sie können hier ein schrittweises Beispiel finden: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html
Wenn Sie das gleiche Problem haben und Spring-Boot v1.4 + verwenden, können Sie dies auf diese Weise tun.
Es gibt ein includeSystemScope , das Sie verwenden können, um Abhängigkeiten des Systembereichs zur Jar hinzuzufügen.
z.B.
Ich verwende Oracle-Treiber für mein Projekt.
<dependency>
<groupId>com.Oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar</systemPath>
</dependency>
dann make includeSystemScope = true, um die jar in den Pfad/BOOT-INF/lib/** aufzunehmen
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
und von der Ressource ausschließen, um ein Duplikat zu vermeiden, ist das Gefäß fett genug ~
<build>
<testSourceDirectory>src/test/Java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.jar</exclude>
</excludes>
</resource>
</resources>
</build>
Viel Glück!
Maven Möglichkeit, Nicht-Maven-Gläser zu Maven-Projekt hinzuzufügen
Maven-Projekt und Nicht-Maven-Gläser
Fügen Sie die Maven-Installations-Plugins in Ihren Build-Abschnitt ein.
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>${version.maven-install-plugin}</version>
<executions>
<execution>
<id>install-external-non-maven1-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
<file>${project.basedir}/libs/non-maven1.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven2-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
<file>${project.basedir}/libs/non-maven2.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven3-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
<file>${project.basedir}/libs/non-maven3.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
Füge die Abhängigkeit hinzu
<dependencies>
<dependency>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
</dependency>
<dependency>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
</dependency>
<dependency>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
</dependency>
</dependencies>
Referenzen Hinweis Ich bin der Inhaber des Blogs
Ändern Sie Ihren systemPath .
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${project.basedir}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
Die pom.xml wird Ihr lokales Repository untersuchen, um die Abhängigkeit zu finden, die Ihrem Artefakt entspricht. Außerdem sollten Sie nicht unbedingt die Attribute system scope oder systemPath verwenden. Diese sind normalerweise für Dinge im JDK und nicht in der JRE reserviert
In dieser Frage erfahren Sie, wie Sie Maven-Artefakte installieren.
Beachten Sie, dass alle Beispiele dieses Beispiels verwenden
<repository>...</respository>
erfordern äußere
<repositories>...</repositories>
tags einschließen. Aus einigen Beispielen ist nicht klar.
Die beste Lösung ist hier ein Repository zu installieren: Nexus oder Artifactory. Wenn Ihnen ein Platz für solche Dinge zur Verfügung steht, beschleunigt dies die Dinge, indem Sie Ihre Daten von außen zwischenspeichern.
Wenn es sich bei der Sache um Open Source handelt, könnten Sie auch put in central betrachten.
Siehe die Anleitung .
Mit Eclipse Oxygen können Sie die folgenden Dinge tun:
Maven nimmt sie bei der Installation des Projekts mit.
Wenn die externe Dose nur von einem Maven-Projekt erstellt wird, können Sie das gesamte Projekt auf Ihrem System kopieren und eine
mvn install
im Projektverzeichnis. Dadurch wird die JAR-Datei im .m2-Verzeichnis hinzugefügt, das als lokales Maven-Repository dient.
Jetzt können Sie das hinzufügen
<dependency>
<groupId>copy-from-the=maven-pom-of-existing-project</groupId>
<artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
<version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>
Dies wird sicherstellen, dass Sie
mvn exec:Java
funktioniert. Bei Verwendung von hier vorgeschlagen
<scope>system</scope>
Dann müssen Sie Klassen einzeln hinzufügen, während Sie die Ausführung über die Befehlszeile ausführen.
Sie können die externen Gläser mit dem folgenden Befehl hinzufügen: hier beschrieben
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>