美文网首页
新版bintray Android library上传到JCen

新版bintray Android library上传到JCen

作者: 星冷若石 | 来源:发表于2018-05-04 13:11 被阅读0次

    compile'com.android.support.constraint:constraint-layout:1.0.2'

    类似这样的网络依赖,相信所有的Android对此熟的不能在熟了。而这样的一段代码能让你自动下载所对应的Library并依赖,相信不少人并不清楚它的原理。下面我们来简单说说:

    Android Studio是从build.gradle里面定义的Maven 仓库服务器上下载library的。Apache Maven是Apache开发的一个工具,提供了用于贡献library的文件服务器。总的来说,只有两个标准的Android library文件服务器:jcenter 和  Maven Central。

    jcenter

    jcenter是一个由 bintray.com维护的Maven仓库 。你可以在这里看到整个仓库的内容。

    我们在项目的build.gradle 文件中如下定义仓库,就能使用jcenter了:

    allprojects {

        repositories {

            jcenter()

        }

    }

    Maven Central

    Maven Central 则是由sonatype.org维护的Maven仓库。你可以在这里看到整个仓库。

    注:不管是jcenter还是Maven Central ,两者都是Maven仓库

    我们在项目的build.gradle 文件中如下定义仓库,就能使用Maven Central了:

    allprojects {

        repositories {

            mavenCentral()

        }

    }

    虽然jcenter和Maven Central 都是标准的 android library仓库,但是它们维护在完全不同的服务器上,由不同的人提供内容,两者之间毫无关系。当前最新版的Android Studio默认使用的事jcenter,理由是:

    1 jcenter通过CDN发送library,开发者可以享受到更快的下载体验。

    2 jcenter是全世界最大的Java仓库,因此在Maven Central 上有的,在jcenter上也极有可能有。

    3 友好的用户界面和简单易操作的上传步骤

    这是我们常用的仓库,另外还有其他类型的仓库,这里我们暂时不做详解了。


    下面我们再了解下自己动手上传Library到bintray的步骤。关于这个,有很多大神已经分享过,这里我仅结合自己上传的经验和各位大神的经验,尽力清晰的理出它们的步骤。

    第一部分:在bintray上创建package

    首先,你需要在bintray上创建一个package。为此,你需要一个bintray账号,并在网站上创建一个package。

    第一步:在bintray.com上注册一个账号。(注册过程很简单,自己完成)

    第二步:完成注册之后,登录网站,然后点击maven。

    第三步:点击Add New Package,为我们的library创建一个新的package。

    第四步:输入所有需要的信息

    虽然如何命名包名没有什么限定,但是也有一定规范。所有字母应该为小写,单词之间用-分割,比如,fb-like。

    当每项都填完之后,点击Create Package。

    第五步:网页将引导你到 Package编辑页面。点击 Edit Package文字下的Package名字,进入Package详情界面。

    完工!现在你有了自己在Bintray上的Maven仓库,可以准备上传library到上面了。 

    Bintray账户的注册就完成了。下一步是Sonatype,Maven Central 的提供者。


    第二部分:准备一个Library,并填写一些配置信息

    library的的创建过程,我便跳过了。

    下一步是把bintray插件应用在项目中。我们需要修改项目的build.gradle(就是根目录的build.gradle,app下的build.gradle是module的build.gradle,一定分清楚)文件中的依赖部分,如下:

    dependencies {

        classpath 'com.android.tools.build:gradle:1.2.3'

        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' //自动化maven打包插件

        classpath 'com.github.dcendents:android-maven-plugin:1.2' //自动上传至Bintray平台插件

    }

    接下来在module的build.gradle的中添加以下代码

    applyplugin:'com.github.dcendents.android-maven'

    applyplugin:'com.jfrog.bintray'

    // This generates POM.xml with proper parameters

    install {

    repositories.mavenInstaller {

    pom {

    project {

    licenses {

        license {

                        name 'The Apache Software License, Version 2.0'

                            url'http://www.apache.org/licenses/LICENSE-2.0.txt'

                        }

                }

    developers {

    developer {

    id developerId  //通常是你在开源社区的昵称

    name developerName  //你的姓名

    email developerEmail  //你的邮箱

    }

    }

    scm {

    connection projectGitUrl  //项目的Git地址,例如:https://github.com/xiaopansky/Sketch.git

    developerConnection projectGitUrl  //项目的Git地址,例如:https://github.com/xiaopansky/Sketch.git

    url projectSiteUrl  //项目官方网站的地址,没有的话就用Github上的地址,例如:https://github.com/xiaopansky/Sketch

    }

    }

    }

    }

    }

    // This generates sources.jar

    task sourcesJar(type: Jar) {

    from android.sourceSets.main.java.srcDirs

    classifier ='sources'

    }

    task javadoc(type: Javadoc) {

    source = android.sourceSets.main.java.srcDirs

    classpath +=project.files(android.getBootClasspath().join(File.pathSeparator))

    }

    // This generates javadoc.jar

    task javadocJar(type: Jar,dependsOn: javadoc) {

    classifier ='javadoc'

        from javadoc.destinationDir  

    }

    artifacts {

    archivesjavadocJar

        archivessourcesJar

    }

    // javadoc configuration

    javadoc {

    options{

    encoding"UTF-8"

            charSet'UTF-8'

            authortrue

            version projectVersionName  //项目版本号

    links"http://docs.oracle.com/javase/7/docs/api"

            title javadocName  //生成的javadoc打开后主页显示的名称,通常跟项目名称一样即可

    }

    }

    // bintray configuration

    bintray {

    user = bintrayUser  //你的Bintray的用户名

    key = bintrayApikey  //你的的Bintray的API Key

    configurations = ['archives']

    pkg {

    repo ="maven" //在bintray上的repository的名称,一般默认为"maven"

            name = projectName //项目名称

    websiteUrl = projectSiteUrl  //项目名称项目官方网站的地址,没有的话就用Github上的地址,例如:https://github.com/xiaopansky/Sketch

    vcsUrl = projectGitUrl  //项目的Git地址,例如:https://github.com/xiaopansky/Sketch.git

    licenses = ["Apache-2.0"]

    publish =true

        }

    }

    以上是配置信息,也可以通过创建类似bintrayKey.properties和bintrayProject.properties的文件设置配置信息,效果一样。不过更方便修改信息和数据安全。所以推荐使用。很简单,这里暂不做详细概述,以后有时间再补充。不会的同学可以参考大神的博客https://www.jianshu.com/p/0e7b8e14f0cd


    第三部分: 把library上传到你的bintray

    gradlew install(也可在工具右侧寻找)一定要先install  否则会报错

    gradlew bintrayUpload

    install的过程可能会出现一些报错信息,比如

    ,如果不影响install  BUILD SUCCESSFUL就不用管它。

    有些时候可能会影响到build过程导致erro,可以把support仓库卸载了,再重新安装一次。

    bintrayUpload的过程可能会出现一些报错信息

    Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): ‘路径’

    错误: 编码GBK的不可映射字符 ——注释不要用中文,或者修改项目的字符编码

    错误: 找不到符号——删除javadoc里所有的html标签

    Could not create package ‘路径’: HTTP/1.1 401 Unauthorized [message:This resource requires authentication]

    你一定是用户名或者APIKey填错了。

    修改完错误上传成功之后,就可以方便的使用compile了。以上。

    -bash: ./gradlew: Permission denied

    执行命令的权限不够,先执行如下命令赋予权限:

    chmod +x gradlew  回车执行后,再执行上传jcenter命令就可以了。

    Execution failed for task ':core:lint'.

    > Lint found errors in the project; aborting build.

    在上传过程中执行了lint检查,所以可能会报上面的错误。解决方法就是避免lint的检查,在每个module的gradle下面就要添加如下配置:

    android {

    lintOptions {

    abortOnError false

    }

    }

    :Execution failed for task ':core:mavenAndroidJavadocs'.

    > Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): '/Users/zhou/git/app/core/build/tmp/mavenAndroidJavadocs/javadoc.options'

    在上传过程中执行了javadoc检查,所以可能会报上面的错误。解决方法就是避免javadoc的检查,在项目根目录下的gradle下面就要添加如下配置:

    allprojects {

    repositories {

    jcenter()

    }

    tasks.withType(Javadoc) {

    options.addStringOption('Xdoclint:none', '-quiet')

    options.addStringOption('encoding', 'UTF-8')

    }

    }


    第六部分:同步bintray用户仓库到jcenter

    把library同步到jcenter非常容易。只需访问网页并点击Add to JCenter

    什么也不做直接点击Send。

    等待bintray团队审核我们的请求,大概2-3个小时。一旦同步的请求审核通过,你会收到一封确认此更改的邮件。现在我们去网页上确认,你会在 Linked To 部分看到一些变化。




    相关文章

      网友评论

          本文标题:新版bintray Android library上传到JCen

          本文链接:https://www.haomeiwen.com/subject/mcarrftx.html