Gradle:如何将Android库发布到本地存储库

Bao*_* Le 31 android android-gradle-plugin

我有一个使用Gradle和Android Studio的库和Android应用程序.我可以将库直接包含在项目中,如下所示

compile project(':library')
Run Code Online (Sandbox Code Playgroud)

因为我不想与库源代码相结合,所以我想将库发布到本地存储库中,以便我可以使用as

compile 'com.mygroup:library:1.0'
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

Bao*_* Le 49

我刚刚找到了解决方案.在库项目的build.gradle中,添加它

apply plugin: 'maven'

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

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://[your local maven path here]")
            // or repository(url: mavenLocal().getUrl()) 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在项目文件夹中,键入以下命令

gradle uploadArchives
Run Code Online (Sandbox Code Playgroud)

阅读发布工件以获取更多信息

  • repository(url:mavenLocal().getUrl()) (6认同)
  • `[你当地的maven路径]`就像`〜/ .m2`文件夹? (2认同)

And*_*ejs 28

对于Android库,您应该使用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'
Run Code Online (Sandbox Code Playgroud)

然后发布到本地存储库运行:

./gradlew install
Run Code Online (Sandbox Code Playgroud)

它将安装在$ HOME/.m2/repository中.在您的应用程序或其他项目中,您可以通过添加mavenLocal()到您的存储库来包含它.

或者,如果您的库位于GitHub上,那么您可以使用JitPack将其包含在其他项目中.然后你不必运行上面的命令,只需使用被推送的内容即可.

  • 我想在lib中还需要`group ='com.example'version ='1.0'`. (3认同)

Log*_*ain 5

在本地maven存储库上发布de库,然后在gradle使用上发布

repositories {
  mavenLocal()
}
Run Code Online (Sandbox Code Playgroud)

如果列出了其他存储库,请确保首先显示mavenLocal.

文件:关于https://gradle.org/docs/current/userguide/dependency_management.html的第51.6.4节


Phi*_*ann 5

我更喜欢将java源代码和javadoc添加到maven资源库中.以下脚本使用android maven插件将您的android库发布到maven存储库.它创建.aar,javadoc.jar,sources.jar和.pom,并在将文件上载到maven存储库后更新maven-metadata.xml.我还把脚本放在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")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

叫它

./gradlew uploadArchives
Run Code Online (Sandbox Code Playgroud)