上传Android或Java库到Maven central repository(转载)
主要介绍利用Sonatype将jar或aar提交到Maven的中央仓库。
是不是希望将自己的jar或是aar传到maven官方库中,在The Central Repository中可以被其他人搜索使用呢,是的话,往下看吧。
1、Sonatype简介
Sonatype使用Nexus为开源项目提供托管服务。你可以通过它发布快照(snapshot)或是稳定版(release)到Maven中央仓库。我们只要注册一个Sonatype的JIRA账号、创建一个JIRA ticket,然后对POM文件稍作配置即可。
2、注册账号
打开https://issues.sonatype.org/ 注册Sonatype的JIRA账号,这个账号在后面配置maven server时需要使用。
打开Create a OSSRH ticke 创建一个JIRA ticket,你的一个项目对应着这里的一个JIRA ticket,
其中Summary可以填写项目名,Description填写项目介绍。
Group Id非常重要,必须是你项目pom.xml中的group id的父级,做为你账号和该项目关联的标记。如我项目pom.xml中group id为cn.trinea.android.common,为了我所有项目都可以发布,申请填写的Group Id为cn.trinea
其他按照提示填写即可。完成后大概2个工作日左右,该Issue会变为 _resolved_ 状态表示可用,在可用前下面的过程除了第7步 正式发布外,其他的都没有问题。
3、软件环境
(1) JDK5以上
(2) Subversion 或是 Git
这是根据你项目需要的,你项目用什么版本控制管理工具
(3) Maven 2.2.1+
(4) GPG,用于对需要上传的文件加密和签名
下载地址:https://www.gnupg.org/download/index.html,windows版下载地址:http://gpg4win.org/
安装完成后通过在命令行模式下通过
1
|
gpg--gen-key
|
命令生成自己的public key,除了姓名、邮箱、备注外其他都可以使用默认配置,最后需要填写一个passphase,注意它在后面mvn release签名时需要。
public key生成结束后用
1
|
gpg--list-keys
|
命令查看key内容,如下:
XHTML
1
2
3
4
5
|
C:/Users/Trinea/AppData/Roaming/gnupg/pubring.gpg
--------------------------------------------------------
pub2048R/C6EED57A2014-05-11
uidTrinea(www.trinea.cn)<trinea.cn@gmail.com>
sub2048R/932D6F332014-05-11
|
其中C6EED57A为key id,需要将他上报给服务器,命令如下:
1
|
gpg--keyserverhkp://pool.sks-keyservers.net--send-keysC6EED57A
|
这样便完成了gpg public key的创建和上报操作。
如果有兴趣深入了解可见:How To Generate PGP Signatures With Maven
4、标准的Pom文件格式
(1) POM文件必须含有以下元素
<modelVersion>
<groupId>
<artifactId>
<version>
<packaging>
<name>
<description>
<url>
<licenses>
<scm><url>
<scm><connection>
<developers>
(2) 如果是jar文件,必须包含-javadoc.jar及-sources.jar,即需要在POM中配置build的相应plugin
关于pom.xml内容可参考:https://github.com/Trinea/android-common/blob/master/pom.xml
其中需要修改以下地方
(1) 相关元素信息改为你自己项目信息。
(2) 必须保证parent或parent的parent为
Java
1
2
3
4
5
|
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
|
(3) 如果你版本控制使用的不是git,而是其他工具,配置见POM and settings config
(4) 纯Java(非Android)工程需要将<packaging>aar</packaging>改为<packaging>jar</packaging>,并且去掉
Java
1
2
3
4
5
6
7
|
<!--Android deps-->
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.0.1.2</version>
<scope>provided</scope>
</dependency>
|
和
Java
1
2
3
4
5
6
7
8
9
10
11
12
|
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<sdk>
<platform>14</platform>
</sdk>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
|
5、配置Maven仓库地址
在.m2目录下的settings.xml文件中添加
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<settings>
...
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>your-jira-id</username>
<password>your-jira-pwd</password>
</server>
</servers>
...
</settings>
|
将其中的your-jira-id和your-jira-pwd替换为你在https://issues.sonatype.org/上的用户名和密码。
m2 目录在linux下路径为/home/user-name/.m2,windows下路径为C:\Users\your-user-name\.m2
如果后面步骤中发现settings修改不生效可参考:Maven Sonatype Nexus return 401
6、编译上传
(1) 发布一个snapshot版本
mvn clean deploy
发布完成后登陆https://oss.sonatype.org (https://issues.sonatype.org/ 上的用户名和密码),通过下图步骤找到自己的Artifact(上传的jar或aar或pom等)
(2) 发布一个release版本
mvn release:clean release:prepare release:perform
过程中需要通过GPG签名,需要输入上面的passphase。发布完成后我们依然可以通过类似上图步骤找到我们的Artifact
其他上传方式见Stage a Release
7、正式发布
这里的正式发布是指同步到Maven主仓库使得其他人可以使用。主要包括Close和Release两步,先Close后Release,分别如下图
其他不明白可以查看:Release
需要注意
(1) 在release时可能会出现
XHTML
1
2
|
Releasefailed
Nexusreturnedanerror:ERROR403:Forbidden
|
的403弹窗,这可能是因为在2中创建的JIRA ticket,状态还没有变为 _resolved_,等待可用即可。如果上面截图中你的Repository列表中Profile列的值不是你在创建JIRA ticket时的Group Id需要重新提交。
(2) 如果是第一次release,需要到之前你的JIRA ticket下,评论下告诉他们,你已经release了,需要同步下,我的JIRA ticket: OSSRH-9800. 如下图:
上传Android或Java库到Maven central repository(转载)的更多相关文章
- Github开源Java项目(Disconf)上传到Maven Central Repository方法详细介绍
最近我做了一个开源项目 Disconf:Distributed Configuration Management Platform(分布式配置管理平台) ,简单来说,就是为所有业务平台系统管理配置文件 ...
- maven安装 maven上传jar包到库里面
maven的安装与配置:http://pansanday.blog.163.com/blog/static/381662802012727103454743/ maven上传jar包到库里面: 将私有 ...
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...
- 在C#客户端用HTTP上传文件到Java服务器
在C#客户端用HTTP上传文件到Java服务器 来源:http://www.cnblogs.com/AndyDai/p/5135294.html 最近在做C / S 开发,需要在C#客户端上传文件到 ...
- GitHub上传项目到远程库
写文章 GitHub上传项目到远程库 GitHub上传项目到远程库 今天把想把文件托管到GitHub仓库,但是执行一系列的命令以后,刷新GitHub网站还是没有任何更新.后来终于找到原因,原来 ...
- 根据短链生成二维码并上传七牛云(Java)
通过短链生成二维码并上传七牛云(Java) 前言 网上这种帖子其实也是很多,大部分搜出来的是CSDN的,然后点进去一看都几乎一样:所以这次给个自己实践的例子记录. 这次也是通过搜索得到的一部分能实现这 ...
- Git 使用,本地项目上传到GitHub远程库
Git 使用,本地项目上传到GitHub远程库 环境 GitHub账号 点此进入github官网 git客户端工具 点此进入git下载页 本地项目上传到 GitHub 在GitHub中创建一个仓库(远 ...
- How to distribute your own Android library through jCenter and Maven Central from Android Studio
In Android Studio, if you wish to include any library to your application. You could just simply add ...
- 上传Android代码到Jcenter(解决了字符映射的问题)
请先阅读:http://blog.saymagic.cn/2015/02/16/release-library-to-jcenter.html 最外面的build.gradle // Top-leve ...
随机推荐
- html5+css3学习笔记音频和视频
格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG 4 9.0+ No No 5.0+ 3.0+ WebM No 4.0+ ...
- unity 退到桌面的 OnApplicationPause
void OnApplicationFocus( bool isFocus ) { // Debug.Log("--------OnApplicationPause---" + i ...
- Hibernate框架--关联映射,一对多,多对多 inverse cascade
回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...
- hive学习之WordCount单词统计
看hive目录下就可以了,程序在hdfs里创建一个hive的大文件夹,相当于数据库吧.上面就是一个完整的利用hive来做单词统计,其中的优劣也能看出一点.
- python2.7学习记录之二
一.高级特性 1.切片取前3个元素用L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.如果第一个索引是0可省略.前10个数 每两个取一个L[:10:2],所有数 每5个取一个L[::5 ...
- [bzoj3196][Tyvj 1730][二逼平衡树] (线段树套treap)
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查询k在 ...
- getTime 方法
转自http://www.yesky.com/imagesnew/software/javascript/html/jsmthgettime.htm getTime 方法返回 Date 对象中的时间值 ...
- ice使用过程遇到的问题
1 设置代理超时时间ice_timeout ICE的每个连接都有两个超时时间:ice_timeout.ice_connectiontimeout,分别对应消息的超时时间和连接建立 的超时时间,可 ...
- 命令 shell 学习
for i in a b c do echo $i done !ser 历史补全 > 正确信息输出文件 >>正确信息输出文件 ,追加 2>错误信息输出文件 2>> ...
- node.js作为“简单HTTP服务器”
场景 当我学习一个JavaScript库的时候,需要一个非常简单的HTTP服务器把当前工作路径变为网站根目录,由此来访问网页的静态信息.现在,除了下边的脚本server.js,假设你已经拥有: 一个工 ...