使用jcenter发布jar包

传说使用maven库发布jar包是一件非常麻烦的事情,安卓的gradle构建已经默认使用了jcenter,而且现在很多jar包只在jcenter上有,在maven上面没有,因此开始尝试使用jcenter来代替maven。

也许是习惯问题,感觉jcenter的搜索功能感觉很糟糕,没有 http://search.maven.org/ 这么方便,搜出来的结果乱七八糟的一大堆,暂时还是只用jcenter来下载和上传jar包,搜索包及版本还是在maven上面进行。国内的网络访问jcenter比maven要快不少。

使用jcenter来下载依赖包非常简单,在gradle脚本中,将全部 mavenCentral() 的地方改成jcenter()就可以了。

主要来说说将自己的包打包上传到jcenter的流程。

进入https://bintray.com/,注册一个账号,bintray支持很多第三方账号登陆,不论是用那种方式登陆,都建议关联一下自己的github账号,因为后面申请将自己的jar包投放到jcenter时,管理员会让你提供一些信息来证明你拥有该jar包代码的贡献者权限。

Can you please provide an online reference showing you’re a contributor to this project? Thanks, Bintray Team。

注册完成后,进入自己的maven库,创建一个新的package,填写详细的package信息,最好能在github上面有项目地址,申请发布到jcenter时会方便很多。

bintray项目截图

 

Package创建后,上图红色圈起来的部分是 Add to JCenter的按钮 ,点击申请将该包添加到jcenter,否则上传上去的内容别人不能通过jcenter()来下载到。

Request to include the package in jcenter

 

jcenter是不提供snapshot版本发布的,如果需要托管snapshot版本,需要在申请时勾上“Host my snapshot build artifacts on the OSS Artifactory at”的选项,这样审核通过后,可以使用bintray的账号登陆https://oss.jfrog.org,并且可以将snapshot版本托管到jfrog。

接下来就等待bintray工作人员的审核了,由于时区不同,他们审核最长可能需要大半天时间。等待审核的这段时间可以先写写发布脚本。

apply plugin: 'maven-publish'
apply plugin: "com.jfrog.bintray"
apply plugin: "com.jfrog.artifactory"
//通过该插件,生出来的pom.xml文件依赖项中才会有<optional>true</optional>的选项
apply plugin: 'optional-base' 
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2"
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
        classpath 'com.netflix.nebula:gradle-extra-configurations-plugin:2.2.+'
    }
}

allprojects {
    apply plugin: 'java'
    repositories {
        jcenter()
    }
}

task sourceJar(type: Jar) {
    classifier = 'sources'
    from sourceSets.main.allJava
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact sourceJar
        }
    }
}
Properties properties = new Properties()
properties.load(new FileInputStream("${System.properties['user.home']}/bintray.properties"))
artifactory {
    contextUrl = 'http://oss.jfrog.org/artifactory'
    resolve {
        repository {
            repoKey = 'libs-release'
        }
    }
    publish {
        repository {
            repoKey = 'oss-snapshot-local' //The Artifactory repository key to publish to
            username =  properties.getProperty("bintray.user")
            password = properties.getProperty("bintray.apikey")
            maven = true
        }
        defaults {
//这里的名字和上面红色的名字一致即可,会将其包含的输出上传到jfrog上去
            publications('mavenJava')
            publishArtifacts = true
        }
    }
}
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    publications('mavenJava')
    pkg {
        repo = "maven"
        name = "java-utils"	//发布到JCenter上的项目名字
        websiteUrl = "http://wujc.cn"
        licenses = ["Apache-2.0"]
        publish = true
    }
}

dependencies {
    compile "org.jasig.cas.client:cas-client-core:3.2.1"
    compile "org.apache.shiro:shiro-cas:${shiroVersion}", optional
    compile "org.apache.shiro:shiro-spring:${shiroVersion}", optional
}

执行gradle artifactoryPublish就可以发布到oss.jfrog.org上去了。

gradle可以通过这种方式下载到发布的snapshot包:

maven { url "http://oss.jfrog.org/oss-snapshot-local/" }

《使用jcenter发布jar包》上有4条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注