Ich habe eine JAR in meinem Android-Projekt und möchte, dass sie zur endgültigen APK hinzugefügt wird. Okay, hier bin ich:
<dependency>
<groupId>com.loopj.android.http</groupId>
<artifactId>android-async-http</artifactId>
<version>1.3.2</version>
<type>jar</type>
<scope>system</scope>
<systemPath>${project.basedir}/libs/android-async-http-1.3.2.jar</systemPath>
</dependency>
Aber wenn ich renne, bekomme mvn package
ich eine Warnung:
[WARNING] Some problems were encountered while building the effective model for **apk:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.loopj.android.http:android-async-http:jar should not point at files within the project directory, ${project.basedir}/libs/android-async-http-1.3.2.jar will be unresolvable by dependent projects @ line 36, column 25
Und in der letzten APK gibt es keine JARs.
Wie behebe ich das?
Antworten:
Sie müssen das Glas zu Ihrem lokalen Maven-Repository hinzufügen. Alternativ (bessere Option) geben Sie das richtige Repository an (falls vorhanden), damit es automatisch von maven heruntergeladen werden kann
Entfernen Sie in beiden Fällen das
<systemPath>
Tag aus der Abhängigkeitquelle
maven install
auf jedem Computer zu machen, auf dem ich dieses Projekt erstellen möchte (leider habe ich diese JAR nicht in Repos gefunden). Vielen Dank! :)Ich kenne den wahren Grund nicht, aber Maven drängt Entwickler, alle Bibliotheken (auch benutzerdefinierte) in einigen Maven-Repositorys zu installieren. Dies
scope:system
ist nicht sehr beliebt. Eine einfache Problemumgehung ist die Verwendungmaven-install-plugin
Folgen Sie der Verwendung:
Schreiben Sie Ihre Abhängigkeit auf diese Weise
Fügen Sie dann das Maven-Install-Plugin hinzu
achten Sie auf
phase:clean
, Ihre benutzerdefinierte Bibliothek in Ihrem Repository zu installieren, müssen Sie laufenmvn clean
und dannmvn install
quelle
<phase>process-resources</phase>
anstelle von verwenden<phase>clean</phase>
. Die Prozessressourcenphase scheint für ein solches Szenario besser geeignet zu sein und wird immer vor der Kompilierungsphase aufgerufen.clean
Phase sehr irreführend, sie ist nicht Teil des Standardlebenszyklus und verzerrt die Bedeutung vonclean
. Darüber hinaus schlägt die vorgeschlagene Änderung zur Verwendung einer Phase im Standardlebenszyklus (z. B.validate
oderprocess-resources
) in einer Situation mit mehreren Modulen fehl, da der Aggregator versucht, Abhängigkeiten aufzulösen, bevor benutzerdefinierte Ziele für untergeordnete Module ausgeführt werden.Versuche dies.
quelle
Der Systemumfang wurde nur für den Umgang mit Systemdateien entwickelt. Dateien an einem festen Ort. Dateien in
/usr/lib
oder${java.home}
(ztools.jar
. B. ). Es wurde nicht entwickelt, um verschiedene.jar
Dateien in Ihrem Projekt zu unterstützen.Die Autoren haben sich absichtlich geweigert, die Pfadnamenerweiterungen so zu gestalten, dass Sie entmutigt werden. Kurzfristig können Sie daher
install:install-file
das lokale Repo installieren und eines Tages einen Repo-Manager zum Teilen verwenden.quelle
Verwenden Sie einen Repository-Manager und installieren Sie diese Art von Gläsern. Das löst Ihre Probleme überhaupt und für alle Computer in Ihrem Netzwerk.
quelle
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
- siehe hub.docker.com/r/sonatype/nexus3 für Details.Versuchen Sie diese Konfiguration. Es hat bei mir funktioniert:
quelle
mvn install: install-file -DgroupId = com.paic.maven -DartifactId = tplconfig-maven-plugin -Dversion = 1.0 -Dpackaging = jar -Dfile = tplconfig-maven-plugin-1.0.jar -DgeneratePom = true
Installieren Sie das JAR im lokalen Repository.
quelle
Dank Ging3r habe ich eine Lösung bekommen:
folge diesen Schritten:
Nicht im Abhängigkeitstag verwenden. Verwenden Sie das folgende in Abhängigkeiten-Tag in der Datei pom.xml:
Verwenden Sie den folgenden Code im Plugins-Tag in der Datei pom.xml:
Ich füge 3 Gläser aus dem lib-Ordner hinzu:
Verwenden Sie zum Schluss
mvn clean
und dannmvn install
oder 'mvn clean install' und führen Sie einfach die JAR-Datei aus dem Zielordner oder dem Installationspfad aus (siehemvn install
Protokoll):java -jar abc.jar
Hinweis: Denken Sie an eine Sache, wenn Sie bei Jenkins arbeiten, dann verwenden Sie zuerst
mvn clean
und dannmvn clean install
Befehlsarbeit für Sie, da mit dem vorherigen Codemvn clean install
Befehl Cache für Abhängigkeit speichern.quelle