美文网首页Android StudioAndroid技术知识
不开源的情况下上传jar包至maven仓库

不开源的情况下上传jar包至maven仓库

作者: manjusaka0128 | 来源:发表于2016-06-27 17:56 被阅读1735次

    之前有篇文章介绍如何在远程仓库中导入so:http://www.jianshu.com/p/c65697f6bc36

    文中提到上传maven仓库比较繁琐且需要开源。最近在看到友盟统计在不开源的情况下也能用gradle远程导入jar包,于是明确了的确有种方式可以不开源并上传。

    在具体了解怎么操作前,我猜想大致结构应该是上传一个假的源码框架,在其中引入真的jar包,最后一起打出maven上的jar包,也就是说通过引用jar的形式绕过需要开源的设定。结果证明了我太naive了

    仔细学习友盟的上传git和jar后,我发现自己反而一头雾水了,因为不仅与我的猜想相去甚远,而且上传的东西和结果产出的jar根本牛头不对马嘴。首先maven对上传的开源有比较明确的要求,需要一个git地址,pom文件定义打包。且仓库中可以浏览的jar包都有个source包,而友盟的source却是空的。综合上述情况我明白了肯定有直接上传jar包至maven的方式,而不是我之前认为必须要maven通过pom文件打包得出jar

    通过广泛的查阅资料,在官网的requirements后我找到之前我得出结论的佐证

    If, for some reason (for example, license issue or it's a Scala project), you can not provide -sources.jar or -javadoc.jar , please make fake -sources.jar or -javadoc.jar with simple README inside to pass the checking.

    翻译一下就是如果因为某些原因比如许可问题或这是个Scala工程,使得你不能提供源码包(source.jar)或JAVA文档包(javadoc.jar),请生成一个假的只包含README的源码包或JAVA文档包来通过上传检查

    bingo,官方明确的指出可以上传不开源的jar,那么具体怎么操作呢?终于在官方文档中找到了这一篇指导,简单来说就是生成jar包并签名后和其他资源一起打成一个bundle.jar,最后通过上传bundle.jar来发布出去。

    来,让我们重头开始,让上传不再复杂!!!

    第一步 注册帐号

    上传首先你要有个账户,这个账户就是Sonatype帐号,大胆的去注册就好了。

    注册地址:https://issues.sonatype.org/secure/Signup!default.jspa

    第二步 提交申请

    提交申请获取上传资格

    Issue 地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134

    具体填写很简单,页面上也有简单的说明。因为maven对上传有比较严格的审核,所以上传前会有人工审核。审核的主要对象是groupId,一般为相应的域名。出于安全的考虑,maven不希望你占用别人的域名来发布一些包以免使用者产生混淆。比如我使用com.google.pay去发布一个支付sdk,恐怕大多数人都会误认为是官方发布的。所以审核员会针对groupId做一些限制,比如groupId是一个私有域名,审核员会comment你,希望你证明下你的所有权,一般建议你使用域名相同的邮箱给他发一个邮件,或直接建议你使用com.github.{项目名} 作为你的groupId.如何选groupId,官网也有个简单的视频指导,点开后有股浓浓的咖喱味哦~~~

    提交以后需要等待审核,一般周期为1~2天,因为审核员在米国所以一般东八区时间晚上10点人家才会处理申请,所以白天申请的需要等到第二天。

    第三步 打包并签名

    漫长的等待后,终于审核通过了,你得到了以下提示:

    Configuration has been prepared, now you can:

    Deploy snapshot artifacts into repository  https://oss.sonatype.org/content/repositories/snapshots

     Deploy release artifacts into the staging repository https://oss.sonatype.org/service/local/staging/deploy/maven2

    Promote staged artifacts into repository 'Releases'

    Download snapshot and release artifacts from group https://oss.sonatype.org/content/groups/public

    Download snapshot, release and staged artifacts from staging group https://oss.sonatype.org/content/groups/staging

    please comment on this ticket when you promoted your first release, thanks

    到这一步就万事俱备,只欠jar包了。到目前为止的步骤和其他博客的并无区别,但是鉴于我们需要上传的是非开源的jar。所以以下步骤比较特殊。

    中间插一下签名的说明先

    GPG签名

    定义神马的可以去百度下,这里我只简单的说明,签名作用是防止jar被篡改。

    所以我们需要下载一个GPG的环境,具体使用可以百度之或参考阮大神的博客

    http://www.ruanyifeng.com/blog/2013/07/gpg.html

    配置环境并能运行gpg命令,生成自己的签名并上传成功后我们才能开始下一步。

    打包

    假设我们的groupId就叫com.example.zachary,artifact叫uploadmvn,版本为1.0.0。那么首先我们会有一个uploadmvn.jar,然后我们重命名为uploadmvn-1.0.0.jar,然后新建一个README文件,文件为空或随便写点什么都行,把README文件打成一个jar包,名称为uploadmvn-1.0.0-sources.jar,同理生成uploadmvn-1.0.0-javadoc.jar

    那么我们现在有如下三个包了

    uploadmvn-1.0.0.jar

    uploadmvn-1.0.0-sources.jar

    uploadmvn-1.0.0-javadoc.jar

    然后我们需要编辑一个pom文件

    名称为uploadmvn-1.0.0.pom:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example.zachary</groupId>

    <artifactId>uploadmvn</artifactId>

    <version>1.0.0</version>

    <packaging>jar</packaging>

    <name>whatever</name>

    <description>your description</description>

    <url>your website url</url>

    <licenses>

         <license>

             <name>your license,fake one will work too</name>

             <url>http://www.fake.is.ok.too</url>

        <license>

    </licenses>

    <scm>

    <url>git@github.com:exampleproject/example-git.git</url>

    <connection>scm:git:git@github.com:exampleproject/example-git.git</connection>

    <developerConnection>scm:git:git@github.com:exampleproject/example-git.git</developerConnection>

    </scm>

    <develops>

    <develop>

     <id>whatever id</id>

     <name>whatever name</name>

    <organization>your web site</organization>

    </develop>

    </develops>

    </project>

    ps:纯手打pom文件,拷贝过来简书编辑器不识别,如果错误见谅

    以上pom文件中需要着重填写的是groupId,artifactId,version,不能有错误

    其次是packaging要填jar,如果你上传jar那就填aar。

    最后scm节点中填写一个git地址,和代码没关系也行,我填了一个空项目的地址。

    完成这一步后我们有四个文件分别为:

    uploadmvn-1.0.0.jar

    uploadmvn-1.0.0.pom

    uploadmvn-1.0.0-sources.jar

    uploadmvn-1.0.0-javadoc.jar

    然后依次运行gpg命令签名这四个文件,以pom文件为例

    gpg -ab uploadmvn-1.0.0.pom

    然后会得到对应的asc文件

    最后文件列表为

    uploadmvn-1.0.0.jar

    uploadmvn-1.0.0.jar.asc

    uploadmvn-1.0.0.pom

    uploadmvn-1.0.0.pom.asc

    uploadmvn-1.0.0-sources.jar

    uploadmvn-1.0.0-sources.jar.asc

    uploadmvn-1.0.0-javadoc.jar

    uploadmvn-1.0.0-javadoc.jar.asc

    接下来需要把八个文件打成一个jar,命令示例:

    jar -cvf bundle.jar uploadmvn*

    如果得到一个bundle.jar那就成功了!!!

    我们离最后的胜利只差一步了。

    上传

    打开网址:https://oss.sonatype.org/#welcome

    还记得之前注册的Sonatype帐号么?这里需要使用这个帐号登录。登录成功后左侧会有build promotion选项卡,下面有一个Staging Upload选项

    点击Staging Upload后,在Upload Mode后有个下拉选框,选择Artifact bundle,然后select bundle,找到之前生成的bundle.jar,点击上传按钮。上传后会在上图的Staging Repositories中有显示。点击Staging Repositories,在列表找到自己上传的相应条目,如果状态是close那么表示你上传成功,如果不是,列表下面有activity显示有什么错误,解决后重新上传就好了。如果状态已经是close,那么你需要选中自己对应的条目点击列表上方的release按钮。由于是第一次上传,所以当你release完毕后需要回到之前申请上传资格的地方也就是提交Issue的页面comment审核员你已经release了,告诉他这个issue已经完成了。等待一段时间后,你就可以在search.maven.org上找到自己上传的jar了。

    当看到自己jar已经上传到maven库后,是不是成就感满满呢?以后别的开发者只需要在gradle一行代码就能引用你的jar了

    compile  "com.example.zachary:uploadmvn:1.0.0"

    过程较费时和繁琐,耐心点就好.参考了比较多的资料,尽量列一下好了。有些东西概念都没有足够的篇幅去介绍,有兴趣的可以看参考资料里的链接。在这里拜一下各位大神~~

    参考资料

    1.http://central.sonatype.org/pages/manual-staging-bundle-creation-and-deployment.html 官方的一个上传bundle.jar的文档

    2.http://central.sonatype.org/pages/requirements.html 也是官方的一个上传要求文档,上传前建议读一下

    3.http://www.trinea.cn/dev-tools/upload-java-jar-or-android-aar-to-maven-center-repository/    trinea的介绍比较详细,图片较多很直观

    4.http://my.oschina.net/huangyong/blog/226738?p=2&temp=1467012996079#blog-comments-list  步骤清晰

    5.http://www.ruanyifeng.com/blog/2013/07/gpg.html 阮一峰的GPG介绍,很详细

    相关文章

      网友评论

        本文标题:不开源的情况下上传jar包至maven仓库

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