2016-06-19 28 views
13

voglio usare questa dipendenza Android nel mio programma java:Maven si rifiutano di scaricare AAR dipendenza confezionato dal repository remoto

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

così ho aggiunto tutti i plugin & repository nel mio esperto di file di pom:

<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> 
     ... 

poi aggiungo la dipendenza nello stesso file:

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

Ma non succede nulla, Maven ignorarlo come se non esiste, se importare il suo pacchetto principale in un file di Scala e costruire con mvn clear install -U, ottengo questo errore:

[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] ^

Domanda: Che cosa dovrebbe Devo risolvere questo problema?

+0

Penso che dovresti dare un'occhiata alla directory .m2 del tuo repository centrale (jcenter) e controllare se questo artefatto esiste realmente sul percorso corretto, ad esempio {.m2} /com/o3dr/android/dronekit-android/2.9 0,0 /. Se non esiste, è necessario aggiungerlo –

risposta

4

Utilizzare l'imballaggio Android, ad es. <packaging>apk</packaging>.

Se Maven non è riuscito a scaricare l'artefatto, si lamenterebbe molto prima del ciclo di vita della build. Il problema è che gli artefatti vengono scaricati, ma non usati. aar non è un artefatto Maven standard, quindi Maven non sa cosa farsene. Usarlo richiede un plugin di terze parti con estensioni, quindi l'uso di android-maven-plugin. Leggendo il suo documentation, ha alcuni requisiti per funzionare correttamente. In particolare non è stato utilizzato l'imballaggio Android come accennato qui:

usage of a supported packaging: apk, aar or apklib

In effetti, guardando il plugin source code controlla per il confezionamento Android prima di aggiungere qualsiasi cosa, da aar al classpath.

+0

Btw, facendo ciò potrebbe attivare questo avviso dal plugin: Le dipendenze transitive dovrebbero essere fornite dalla gestione delle dipendenze di Maven. Ti consigliamo di chiedere ai fornitori di cui sopra di imballare correttamente il loro componente. Le cose potrebbero rompersi a livello di compilazione e/o di esecuzione a causa di copie multiple di librerie incompatibili. –

+0

Grazie mille, posso confermare che il download del file aar dal repository bintray è valido e può essere aperto direttamente, potresti essere più specifico? Vale a dire, cosa deve essere impostato nel plugin android-maven per leggere l'aar? – tribbloid

+0

Inoltre, se vai su https://dl.bintray.com/3d-robotics/maven/com/o3dr/android/dronekit-android/2.9.0/ scoprirai che non è disponibile alcuna confezione di apk. E non è definito in dronekit codice sorgente o – tribbloid

6

A seconda del requisito della versione di Maven, in base a ciò che ho affrontato in precedenza, potrebbe essere necessario aggiungere la configurazione per release e snapshot. Nel mio caso, ero solo in grado di ottenere il lib volta ho specificato questi parametri:

<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> 

senza di essa, la dipendenza non è stato scaricato.

+0

Non funziona e produce lo stesso errore, la dipendenza non è ancora inclusa. – tribbloid

+0

Ho pubblicato il mio pom.xml su github: https://github.com/tribbloid/dronespike/blob/master/pom.xml. Comunque, grazie mille per il tuo aiuto! – tribbloid

3

Guardando il repository bintray da cui la dipendenza è disponibile, e controllare le impostazioni del repository tramite il suo inziare opzione, le coordinate repository non sono corrette, dovrebbero essere invece:

<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> 

E infatti il ​​file di destinazione efficace è disponibile tramite l'URL:

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

che rispetta l'URL del repository, più le sue coordinate Maven (groupId, artifactId, versione).


Si noti inoltre: non riutilizzare l'id repository central, se non per ragione specifica, altrimenti si sarebbe ignorare il (default) repository centrale della vostra generazione Maven e tutti i tuoi dipendenze (e plugin) sarebbe solo inverosimile da quello appena dichiarato.

+0

Ancora non funziona: - <. vedere https://codeship.com/projects/89488/builds/16226448 e https://github.com/tribbloid/dronespike/blob/master/pom.xml per la compilazione del risultato – tribbloid

+0

e se si prova da riga di comando il seguente comando : 'mvn dependency: get -Dartifact = com.o3dr.android: dronekit-android: 2.9.0: aar -DrepositoryUrl = http: // dl.bintry.com/3d-robotics/maven'? –

+0

Il risultato sembra buono: BUILD SUCCESS Tempo totale: 5,563 s Ciò significa che la risoluzione del classpath di aar del plug-in è da biasimare per giusto? – tribbloid

0

sbt-android può gestire questa configurazione.

build.sbt

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

progetto/plugins.sbt

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

Aggiungi editoria e resolver regole, se necessario.