2013-09-01 7 views
32

Chcę zainstalować projekt biblioteki Android w lokalnym repozytorium maven. Oto build.gradle:Zadanie "Instaluj" programu Gradle Maven nie działa z projektem biblioteki Android

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 
apply plugin: 'android-library' 
apply plugin: 'maven' 

version = "1.0.0-SNAPSHOT" 
group = "com.example" 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "17.0.0" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 18 
    } 
} 

Kiedy biegnę:

gradle install -i 

utknie tu:

Executing task ':project:installTest' due to: 
    Task has not declared any outputs. 
Starting process 'command 'd:\android-sdk-windows\platform-tools\adb.exe''. Working directory: D:\Projects\java\....... Command: d:\android-sdk-windows\platform-tools\adb.exe install -r D:\Projects\java\.......\build\apk\project.apk 
An attempt to initialize for well behaving parent process finished. 
Successfully started process 'command 'd:\android-sdk-windows\platform-tools\adb.exe'' 
> Building > :project:installTest 

Więc pierwszą rzeczą, jaką zauważyłem jest to, że próbuje dla niektórych dziwny powód, aby wdrożyć go na urządzeniu w postaci pliku APK.

Czy robię coś źle, czy jest to po prostu plugin do biblioteki Android nie jest kompatybilny z wtyczką maven?

Odpowiedz

30

Edit: Proszę odnieść się do strony github (https://github.com/dcendents/android-maven-gradle-plugin) do najnowszych instrukcji i znaleźć odpowiednią wersję do korzystania . Oryginalne instrukcje nie są już odpowiednie w najnowszym wydaniu stopniowym.

Original post:

Mam zmodyfikowano Maven Plugin być zgodne z projektów bibliotecznych android. Zobacz projekt na github: https://github.com/dcendents/android-maven-gradle-plugin

Skonfiguruj swoje projekty biblioteczne android z niego korzystać:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.github.dcendents:android-maven-plugin:1.0' 
    } 
} 

apply plugin: 'android-library' 
apply plugin: 'android-maven' 

Następnie powinieneś być w stanie zainstalować AAR do lokalnego repozytorium maven pomocą zadania instalacji.

Mam nadzieję, że to pomoże, jeśli znajdziesz problemy z wtyczką, daj mi znać na githubie, a naprawię to.

+2

Jak skonfigurować groupid, artifactid i wersję za pomocą tej wtyczki? –

+0

To bardzo dobre rozwiązanie. Używam go teraz w moim projekcie bibliotecznym! Moją jedyną obawą jest to, jak poradziłbyś sobie z nowymi aktualizacjami wtyczki Gradle Maven, czy będziesz je synchronizował? –

+0

Cóż, nie potrzebowałem do tej pory, ale jeśli zauważysz (łamie się, gdy korzystasz z nowej wersji gradle), otwórz problem w projekcie github, a ja wydam zaktualizowaną wersję. – dcendents

0

po prostu rozwiązać ten problem poprzez zdefiniowanie archiwum wysyłania jak opisano tutaj: Gradle documentation 52.6.2. Deploying to a Maven repository

uploadArchives { 
    repositories { 
    mavenDeployer { 
     repository(url: "file://${System.env.HOME}/.m2/repository/") 
    } 
    } 
} 

nazywając

gradle uploadArchives 

wdraża artefakt do (w moim przypadku lokalnego) Maven repo. Nie znalazłem prostego i bardziej elastycznego sposobu na określenie adresu URL lokalnego repo z np. mavenLocal(), ale powyższe pasuje do moich potrzeb.

+0

Dzięki, ale poprosiłem o 'gradle install' zamiast' gradle uploadArchives', które w moim przypadku są używane do przesyłania artefaktów do Maven Central. Chcę móc zainstalować w moim lokalnym repozytorium maven przed zwolnieniem go do Maven Central. –

+0

To nie jest dobra praktyka - zapoznaj się z [odpowiedz Piotra] (http://stackoverflow.com/a/21840160/356895). – JJD

6

UPDATE 2014-11-26

Odpowiedź poniżej sens w momencie pisania tego tekstu, gdy Android Budowanie narzędzia były w wersji 0.5.5. Najprawdopodobniej jest już nieaktualny i prawdopodobnie już nie działa.

Osobiście zamieniłem swoje projekty na wersję android-maven-plugin zgodnie z opisem w powyższej odpowiedzi, wtyczka działa dobrze także z najnowszymi wersjami Narzędzi do budowania Androida.

ORYGINALNY ODPOWIEDŹ OD LUTEGO 2014

wydawnictwa jak AAR

Jeśli nie przeszkadza za pomocą starszej wersji com.android.tools.build:gradle (czyli 0.5.4), można użyć metody opisanej w this blogpost. Nie zgodnie z the discussion in adt-dev mailing-list, to nie działa w 0.5.5.

Dodaj następujące linie do swojego build.gradle:

apply plugin: 'maven-publish' 

// load bundleRelease task 
// this will not load the task in 0.5.5 
android.libraryVariants 

publishing { 
    publications { 
     maven(MavenPublication) { 
      artifact bundleRelease 
     } 
    } 
} 

Aby opublikować do lokalnego repo maven, nazywają to polecenie:

gradle publishToMavenLocal 

Publishing jako JAR

Jeśli Android Biblioteka nie ma własnych zasobów i może zostać opublikowana jako JAR, następnie można użyć następującej build.gradle, który działa nawet z 0.5.5.

// build JAR file 
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) { 
    from "$buildDir/classes/release/" 
} 

apply plugin: 'maven-publish' 

publishing { 
    publications { 
     maven(MavenPublication) { 
      artifact androidReleaseJar 
     } 
    } 
} 

Aby opublikować do lokalnego repo maven, nazywają to polecenie:

gradle publishToMavenLocal 
+0

Może masz anwer na [jak zmienić 'artefactId' podczas używania' maven-publish'] (http://stackoverflow.com/questions/21800033/how-to-overwrite-artifactid-for-android-gradle- biblioteka-projekt) ..? – JJD

+0

Czy nadal nie ma obejścia dla Androida 0.5.5 i "andoroid.libraryVariants". –

+0

Osobiście przełączyłem się na android-maven-plugin (zobacz zaakceptowaną odpowiedź) i nigdy nie oglądałem obejścia opisanego w mojej odpowiedzi. –

11

Istnieje prostsze rozwiązanie, jeśli nie chcesz używać niestandardowej wtyczki. Zamiast tego po prostu odtwórz zadanie instalacji pod inną nazwą. Nazwałem to installArchives. Dodaj poniższy kod do build.gradle:

task installArchives(type: Upload) { 
    description "Installs the artifacts to the local Maven repository." 
    repositories.mavenInstaller { 
     configuration = configurations.default 
     pom.groupId = 'my.group' 
     pom.artifactId = 'my-artifact' 
     pom.version = '1.0.0' 
    } 
} 

Teraz można uruchomić gradle installArchives zainstalować AAR lokalnie.

+0

Czy możesz zmodyfikować swoje zadanie, aby wygenerować słoiki dla źródeł i JavaDoc? – JJD

+0

@JJD To zadanie spowoduje przesłanie pliku aar (bez słoików) z domyślnej konfiguracji. Nie wierzę, że wtyczka gradle Android obsługuje generowanie JavaDocs lub źródłowych komunikatów. Ustalenie, jak to zrobić, prawdopodobnie uzasadniałoby własne pytanie. – Greg

+3

Podczas gdy aar jest wdrażany w repozytorium maven, wygenerowany pom nie zawiera zależności projektu bibliotecznego. – Moritz

17

Opracowanie w odpowiedzi CyclingSir, proponuję dodać oddzielne zadanie "installArchiwa". Powinno to również zająć się zbieraniem niestandardowych artefaktów (np. Źródeł).

apply plugin: 'maven' 

task installArchives(type: Upload) { 
    description "Installs the artifacts to the local Maven repository." 
    configuration = configurations['archives'] 
    repositories { 
    mavenDeployer { 
     repository url: repositories.mavenLocal().url 
    } 
    } 
} 

Należy zauważyć, że z Gradle pluginu Android v0.5.5, gradle install wciąż próbuje zainstalować coś na urządzeniu.

+0

Nie działa dla mnie :( – Genry

+2

Działa świetnie! Możesz użyć 'repozytorium.mavenLocal(). Url' zamiast go kodować. –