传说使用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时会方便很多。
Package创建后,上图红色圈起来的部分是 Add to JCenter的按钮 ,点击申请将该包添加到jcenter,否则上传上去的内容别人不能通过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/" }