2015-02-06 5 views
23

Mam bibliotekę i aplikację na Androida przy użyciu Gradle i Android Studio. Mogę dołączyć bibliotekę bezpośrednio w projekcie następującoGradle: Jak opublikować bibliotekę Androida w lokalnym repozytorium

compile project(':library') 

Bo nie chcą się z siatki z kodu źródłowego biblioteki, chcę publikować bibliotekę w lokalnym repozytorium tak, że można używać jako

compile 'com.mygroup:library:1.0' 

Dowolna porada?

Odpowiedz

39

Właśnie znalazłem rozwiązanie. W build.gradle projektu biblioteki, dodaj

apply plugin: 'maven' 

group = 'com.mygroup' 
version = '1.0' 

uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(url: "file://[your local maven path here]") 
     } 
    } 
} 

w folderze projektu, rodzaj następujące polecenia

gradle uploadArchives 

przeczytane Publishing artifacts więcej informacji

+2

'[lokalna ścieżka Maven tutaj]' jest jak '~/folderu .m2'? – zygimantus

+3

Repozytorium (url: mavenLocal().getUrl()) – abg

0

w settings.gradle dodać

include 'riz.com.mylibrary' 
project(':riz.com.mylibrary').projectDir = new File('C:\\Users\\Rizwan Asif\\AndroidStudioProjects\\mylibrary') 

Następnie w build.gradle w zależności Cies dodać

compile project(':riz.com.mylibrary') 
+1

To najlepszy sposób, jeśli tworzysz bibliotekę w tym samym czasie, ale podczas próby synchronizowania pojawia się błąd "Konfiguracja z nazwą" domyślnie "nie znaleziono". – Megakoresh

25

Dla Biblioteki Android należy użyć wtyczki Android Gradle-Maven https://github.com/dcendents/android-maven-gradle-plugin:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

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

apply plugin: 'com.android.library' 
apply plugin: 'com.github.dcendents.android-maven' 

Następnie do publikowania do lokalnego przebiegu repozytorium

./gradlew install 

który zainstaluje w $ HOME/.m2/repozytorium. W swojej aplikacji lub innym projekcie możesz ją uwzględnić, dodając do swoich repozytoriów mavenLocal().

Alternatywnie, jeśli biblioteka jest zainstalowana na GitHub, możesz po prostu dołączyć ją do innych projektów przy użyciu JitPack. Wtedy nie musisz uruchamiać powyższego polecenia i możesz po prostu użyć tego, co zostało pchnięte.

+0

To powinno być traktowane jako poprawna odpowiedź. –

+3

Przypuszczam, że w bibliotece potrzebujemy również 'group = 'com.example' version = '1.0''. – WindRider

4

Wolę dodawać źródła java i javadoc do repozytorium maven. Poniższy skrypt publikuje twoją bibliotekę androida do maven repozytorium używając android maven plugin. Tworzy pliki .aar, javadoc.jar, sources.jar i .pom oraz aktualizuje plik maven-metadata.xml po przesłaniu plików do repozytorium maven. Umieściłem też skrypt na GitHub.

apply plugin: 'com.android.library' 
apply plugin: 'maven' 

//Your android configuration 
android { 
    //... 
} 

//maven repository info 
group = 'com.example' 
version = '1.0.0' 

ext { 
    //Specify your maven repository url here 
    repositoryUrl = 'ftp://your.maven.repository.com/maven2' 
    //Or you can use 'file:\\\\C:\\Temp' or 'maven-temp' for a local maven repository 
} 

//Upload android library to maven with javadoc and android sources 
configurations { 
    deployerJars 
} 

//If you want to deploy to an ftp server 
dependencies { 
    deployerJars "org.apache.maven.wagon:wagon-ftp:2.2" 
} 

// custom tasks for creating source/javadoc jars 
task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
    destinationDir = file("../javadoc/") 
    failOnError false 
} 

task javadocJar(type: Jar, dependsOn: javadoc) { 
    classifier = 'javadoc' 
    from javadoc.destinationDir 
} 

//Creating sources with comments 
task androidSourcesJar(type: Jar) { 
    classifier = 'sources' 
    from android.sourceSets.main.java.srcDirs 
} 

//Put the androidSources and javadoc to the artifacts 
artifacts { 
    archives androidSourcesJar 
    archives javadocJar 
} 

uploadArchives { 
    repositories { 
     mavenDeployer { 
      configuration = configurations.deployerJars 
      repository(url: repositoryUrl) { 
       //if your repository needs authentication 
       authentication(userName: "username", password: "password") 
      } 
     } 
    } 
} 

nazywają go z

./gradlew uploadArchives