2016-06-19 24 views
13

ich verwenden möchte diese Android Abhängigkeit in meinem Java-Programm zum Download:Maven verweigern aar verpackt Abhängigkeit von Remote-Repository

http://jcenter.bintray.com/com/o3dr/android/dronekit-android/2.9.0/ 

so ich alle Plugins hinzugefügt & Repositories in meine Maven pom-Datei:

<repositories> 
    <repository> 
     <id>central</id> 
     <name>bintray</name> 
     <url>http://jcenter.bintray.com</url> 
     <!--<snapshots>--> 
      <!--<enabled>false</enabled>--> 
     <!--</snapshots>--> 
    </repository> 
</repositories> 

<pluginRepositories> 
    <pluginRepository> 
     <!--<snapshots>--> 
      <!--<enabled>false</enabled>--> 
     <!--</snapshots>--> 
     <id>central</id> 
     <name>bintray-plugins</name> 
     <url>http://jcenter.bintray.com</url> 
    </pluginRepository> 
</pluginRepositories> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>com.simpligility.maven.plugins</groupId> 
      <artifactId>android-maven-plugin</artifactId> 
      <version>4.1.0</version> 

      <extensions>true</extensions> 
      <configuration> 
       <sign> 
        <debug>false</debug> 
       </sign> 
      </configuration> 
     </plugin> 
     ... 

Dann füge ich die Abhängigkeit in der gleichen Datei:

<dependency> 
     <groupId>com.o3dr.android</groupId> 
     <artifactId>dronekit-android</artifactId> 
     <version>2.9.0</version> 
     <type>aar</type> 
    </dependency> 

Aber es passiert nichts, es Maven ignorieren, als ob es nicht vorhanden ist, wenn ich seine Hauptpaket in einer scala-Datei und bauen sie mit mvn clear install -U importieren, bekomme ich diesen Fehler:

[ERROR] /home/peng/git-drone/dronespike/src/main/scala/Main.scala:1: object o3dr is not a member of package com
[ERROR] import com.o3dr.android._
[ERROR] ^

Frage: Was sollte Ich tue, um dieses Problem zu beheben?

+0

Ich denke, Sie sollten sich das .m2-Verzeichnis Ihres zentralen (jcenter) -Repositorys ansehen und prüfen, ob dieses Artefakt tatsächlich auf dem richtigen Pfad existiert, zB {.m2} /com/o3dr/android/dronekit-android/2.9 .0 /. Wenn es dort nicht existiert, müssten Sie es hinzufügen –

Antwort

4

Verwenden Sie Android-Verpackung, z. <packaging>apk</packaging>.

Wenn Maven das Artefakt nicht herunterladen konnte, würde es sich im Build-Lebenszyklus viel früher beschweren. Das Problem besteht darin, dass Artefakte heruntergeladen, aber nicht verwendet werden. aar ist kein Standard-Maven-Artefakt, also weiß Maven nicht, was damit zu tun ist. Die Verwendung erfordert ein Plugin von Drittanbietern mit Erweiterungen, daher die Verwendung von android-maven-plugin. Lesen Sie seine documentation, es hat einige Voraussetzungen, um richtig zu arbeiten. Insbesondere haben Sie dabei nicht android Verpackung wie hier erwähnt:

usage of a supported packaging: apk, aar or apklib

Tat im Plugin source code Suche überprüft es für Android-Verpackung, bevor irgendetwas von aar zu Classpath hinzufügen.

+0

Btw, dies könnte diese Warnung aus dem Plugin auslösen: Transitive Abhängigkeiten sollten wirklich von Maven Abhängigkeitsverwaltung bereitgestellt werden. Wir empfehlen Ihnen, die oben genannten Anbieter zu bitten, ihre Komponenten ordnungsgemäß zu verpacken. Dinge können bei der Kompilierung und/oder Laufzeit aufgrund mehrerer Kopien von inkompatiblen Bibliotheken brechen. –

+0

Vielen Dank, ich kann bestätigen, dass der Download der aar-Datei aus dem Bintray Repo gültig ist und direkt geöffnet werden kann, könnten Sie genauer sein? Nämlich, was muss im Android-Maven-Plugin eingestellt werden, um das AAR zu lesen? – tribbloid

+0

Auch, wenn Sie zu https://dl.bintray.com/3d-robotics/maven/com/o3dr/android/dronekit-android/2.9.0/ gehen, werden Sie feststellen, dass es keine apk Verpackung gibt. Und es ist nicht in dronekit Quellcode entweder – tribbloid

6

Abhängig von der Anforderung Ihrer Maven-Version müssen Sie möglicherweise die Konfiguration für Release und Snapshot hinzufügen. In meinem Fall war ich nur in der Lage, die lib zu bekommen, sobald ich diese Parameter spezifizierte:

<repositories> 
    <repository> 
     <id>central</id> 
     <name>bintray-plugins</name> 
     <url>http://jcenter.bintray.com</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
</repositories> 

<dependencies> 
    <dependency> 
     <groupId>com.o3dr.android</groupId> 
     <artifactId>dronekit-android</artifactId> 
     <version>2.9.0</version> 
     <type>aar</type> 
    </dependency> 
</dependencies> 

ohne es wurde die Abhängigkeit nicht heruntergeladen.

+0

Funktioniert nicht und gibt den gleichen Fehler, die Abhängigkeit ist immer noch nicht enthalten. – tribbloid

+0

Ich habe meine pom.xml auf github veröffentlicht: https://github.com/tribbloid/dronespike/blob/master/pom.xml. Trotzdem, vielen Dank für Ihre Hilfe! – tribbloid

3

Mit Blick auf die bintray Repository von wo aus der Abhängigkeit, verfügbar ist, und überprüfen Sie die Repository-Einstellungen über seine mich einrichten Option, Ihre Repositories Koordinaten nicht korrekt sind, sollten sie stattdessen sein:

<repositories> 
    <repository> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
     <id>bintray-3d-robotics-maven</id> 
     <name>bintray</name> 
     <url>http://dl.bintray.com/3d-robotics/maven</url> 
    </repository> 
</repositories> 
<pluginRepositories> 
    <pluginRepository> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
     <id>bintray-3d-robotics-maven</id> 
     <name>bintray-plugins</name> 
     <url>http://dl.bintray.com/3d-robotics/maven</url> 
    </pluginRepository> 
</pluginRepositories> 

Und in der Tat die effektive Zieldatei ist über die URL zur Verfügung:

https://dl.bintray.com/3d-robotics/maven/com/o3dr/android/dronekit-android/2.9.0/ 

, die die Repository-URL plus seine Maven Koordinaten (groupId, artifactId, Version) respektiert.


Beachten Sie auch: nicht wieder verwenden das Repository-ID central, es sei denn, für einen bestimmten Zweck, sonst würden Sie die zentrale (default) Repository der Maven Build und alle Ihre Abhängigkeiten (und Plugins) außer Kraft setzen würde nur abgerufen werden von der newely erklärt.

+0

Funktioniert immer noch nicht: - <. https://codeship.com/projects/89488/builds/16226448 und https://github.com/tribbloid/dronespike/blob/master/pom.xml zum Kompilieren des Ergebnisses – tribbloid

+0

was ist, wenn Sie von der Befehlszeile den folgenden Befehl versuchen : 'mvn Abhängigkeit: get -Dartifact = com.o3dr.android: dronekit-android: 2.9.0: aar -DepositoryUrl = http: // dl.bintry.com/3d-robotics/maven'? –

+0

Das Ergebnis sieht gut aus: BUILD SUCCESS Gesamtzeit: 5.563 s Das bedeutet die aar Klassenpfad Auflösung des Plugins ist Schuld für richtig? – tribbloid

0

sbt-android kann mit dieser Konfiguration umgehen.

build.sbt

androidBuildJar 
name := "yourproject" 
organization := "yourorganization" 
platformTarget := "android-24" 
libraryDependencies +="com.o3dr.android" % "dronekit-android" % "2.9.0" 

Projekt/plugins.sbt

addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.7") 

hinzufügen Verlags- und Resolver Regeln wie nötig.