原文地址:http://my.oschina.net/songxinqiang/blog/313226
使用maven有一段时间了,不管你同意与否,我都坚决认定maven是很伟大的软件项目,使用它,可以节约很多时间,特别是和git搭配使用的时候,简直就是绝了,就像川菜的花椒和海椒的搭配一样,无与伦比,用过之后肯定会爱上它的。在我的以前的博客里面有关于怎样使用git(eclipse里面的egit插件)管理项目的说明,下面我就怎样将构件发布到maven的中央仓库进行说明。如果你还不知道什么事maven或者git(及时你的工作不会使用到它们,但是都应该有所了解吧),那真的应该去了解一下了。
这里需要说明的是,我的发布过程是参考了开源中国里面的两篇博客的(@黄勇 的http://my.oschina.net/huangyong/blog/226738和@路小磊 的http://my.oschina.net/looly/blog/270767),在此向他们表示感谢。
闲话不多说,下面正式开始。
1、注册Sonatype的账户
maven中央仓库是有一个叫做Sonatype的公司在维护的,在发布构件之前需要到https://issues.sonatype.org/secure/Signup!default.jspa 去注册一个账号,记住自己的用户名和密码,以后要用。
同时,还要记住一个地址,将来在查询自己所发布构件状态和进行一些操作的时候要使用,https://oss.sonatype.org/ 。
2、提交发布申请
提交申请,在这里是创建一个issue的形式,创建地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134 。
在填写issue信息的时候,有一些需要注意的地方:
a) “group id”就是别人在使用你的构件的时候在pom.xml里面进行定位的坐标的一部分,而且尽量应该是你的站点的url倒序,参考java包命名的规范,有时候工作人员会想你确认你是否是这个站点url的拥有者,这里由于我已经购买了songxinqiang.cn域名的所有权,所以我填写的就是“cn.songxinqiang”
b)“project url”这个是项目的站点,一般是用作说明的
c)“SCM url”这个构件的源代码的url,便于别人查看源代码,当然这个得是公网能够访问的,不要是什么内部的svn地址什么的哈,我是用的是开源中国的GIT@OSC,也推荐大家使用
其他的就没有什么了,提交之后就等工作人员离开确认吧,有时候工作人员会问你些你没有明确的内容,只需要回答就好。需要注意的是,这个系统的工作人员是在美国上班的,经过我的等待和观察,他们会在北京时间的22:00开始上班、处理issue,所以在这个时间之前就不要去查询状态了,人家还没有上班呢(我会告诉你,我在上午9:00左右提交了,每个半小时查看一次直到工作人员回复我吗)。
等到工作人员在你创建的issue下面回复你说“配置已经修改……”(还有几个链接)的时候就说明审批已经通过了,你就可以进行构件的上传了。
3、上传之前的准备
在上传构件之前,需要准备GPG以便对发布的文件进行签名。
windows用户到http://www.gpg4win.org/download.html 去下载Gpg4win-Vanilla版来使用,linux的直接安装gpg软件包就行。
1
|
gpg --gen-key |
需要输入姓名、邮箱等字段,其它字段可使用默认值,此外,还需要输入一个 Passphase,相当于一个密钥库的密码,一定不要忘了,也不要告诉别人,最好记下来,因为后面会用到。
更多的请参考@黄勇 的博客(http://my.oschina.net/huangyong/blog/226738)。
4、配置maven
找你所使用的maven的配置文件<mvn_home>/conf/settings.xml,在配置文件中找到<servers>节点,这个节点默认是注释了的,我们就在这个猪似的外边增加一个<servers>的配置
1
2
3
4
5
6
7
|
< servers >
< server >
< id >oss</ id >
< username >用户名</ username >
< password >密码</ password >
</ server >
</ servers >
|
这里的id是将来要在pom.xml里面使用的,所以务必记好,用户名和密码就是在Sonatype上面注册的用户名和密码。
5、配置pom.xml
接下来就是重头戏了,pom.xml是一个maven项目的重点配置,一个项目的所有配置都可以由这个文件来描述,文件中的所有配置都有默认值,也就是说所有的配置都是可选配置,但是为了把构件发布到中央仓库,我们必须配置一些关键信息,否则再发布时是不会通过了。
这些必须明确致命的信息包括:name、description、url、licenses、developers、scm等基本信息,此外,使用了 Maven 的 profile 功能,只有在 release 的时候,创建源码包、创建文档包、使用 GPG 进行数字签名。此外,snapshotRepository 与 repository 中的 id 一定要与 settings.xml 中 server 的 id 保持一致。
大家可以直接继承自我的一个配置的构件,然后再自己定义一个坐标就行了,我的构件坐标是:
1
2
3
|
< groupId >cn.songxinqiang</ groupId >
< artifactId >oss-parent</ artifactId >
< version >1.0</ version >
|
6、上传构件
待构件编写完成,就可以进行上传、发布了。在命令行进入项目pom.xml所在路径,执行:
1
|
mvn clean deploy -P release |
在稍后些时候会要你输入gpg密钥库的密码,输入即可完成上传,具体时间取决于网络情况。当然有时候不会弹出输入密码的输入框,只是提示需要输入密码,根据gpg插件的官网解释(http://maven.apache.org/plugins/maven-gpg-plugin/usage.html),需要加上密码作为参数执行命令,即:
1
|
mvn clean deploy -P release -Dgpg.passphrase=密码 |
7、在OSS中发布构件
构建上传之后需要在OSS系统中对操作进行确认,将构件发布,进入https://oss.sonatype.org/使用你的用户名和密码登陆之后,在左边菜单找到“Staging Repositories”,点击,在右边上面一点有一个输入搜索框输入你的groupid进行快速定位,可以发现这时你的构件状态是“open”,勾选你的构件,查看校验的结果信息,如果没有错误就可以点击刚才勾选的checkbox上面右边一点的“close”按钮,在弹出框中“confirm”,这里又需要校验一次,稍后结果会通过邮箱通知。
等成功后(系统自动进行,很快的),再次登录系统找到你的构件,这是状态已经是“closed”的了,再次勾选,然后点击“close”旁边的“release”,在弹出框中进行“confirm”,稍后结果会通过邮件进行通知。
8、通知sonatype的工作人员关闭issue
回到issue系统,找到你的那个申请发布构件的issue,在下面恢复工作人员,说明构件已经发布,带工作人员确认后,会关闭这个issue。
9、使用构件
一切完成后并不可以马上就使用你所发布的issue,得等系统将你的构件同步到中央仓库之后才可以使用,这个时间至少要2个小时,然后就可以在中央仓库的搜索页面(http://search.maven.org/)搜到你的构件啦,
赶快截图,向他人炫耀一下吧。
10、特别说明
上面的系统是不是很繁琐?别担心,这只是第一次使用你的groupid发布构件,经实践证明,第一次成功之后,以后就可以使用你的groupid发布任何的构件了,只需要你的groupid没有变就行,(当然不能发布重复构件哈),不用这么麻烦。
以后的发布流程:
a)构件准备好之后,在命令行上传构建;
b)在https://oss.sonatype.org/ “close”并“release”构件;
c)等待同步好(大约2小时多)之后,就可以使用了
相关推荐
然而,对于大型企业或团队而言,直接使用公共的Maven中央仓库可能存在一些问题,比如网络延迟、访问限制或内部私有库的需求。这时,就需要搭建一个“私服”(Nexus、Artifactory等)来作为内部的Maven仓库,这就是...
1. **代理仓库(Proxy Repository)**:这类仓库充当对外部远程仓库的代理,例如,ApacheSnapshots和CodehausSnapshots分别提供Apache和Codehaus项目的快照版本,而CentralMavenRepository则是Maven中央仓库的代理,...
maven官方的远程库,中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载得到 私服 私服是一种特殊的远程仓库,它是...
如果你想让你的项目构件可供全球的Maven用户使用,你需要遵循一定的流程将它们发布到Maven中央仓库。这个过程包括在Sonatype Nexus Repository Manager上注册,签署构件,然后提交审核。 总的来说,Maven仓库是...
通常,开发人员需要从 Maven 中央仓库下载各种依赖库到本地。这种方式虽然可行,但在团队协作时会带来一些问题: - **网络带宽消耗大**:每个开发者都需要独立地从互联网下载相同的依赖包,这不仅增加了外部网络的...
- **构建验证**:设置Maven插件对上传到仓库的构件进行验证,确保其符合特定的质量标准。 综上所述,Maven仓库是Maven构建系统的重要组成部分,它不仅简化了依赖管理,还提高了构建的效率和项目的可维护性。合理...
- **统一管理依赖**:通过中央仓库管理所有依赖项,相比于分散在各个本地仓库中的依赖项来说更加便捷高效。 #### Maven构件库的类型 - **本地仓库**:位于每个开发者的本地机器上,从settings.xml文件中定义的远程...
- **上传本地仓库的jar包到中央仓库**:对于自定义开发的构件,可以通过特定的Maven插件上传到中央仓库或其他远程仓库供他人使用。 通过以上步骤,您已经掌握了Maven的基础安装与配置,以及如何在Eclipse中使用...
- **Proxy**:代理仓库,用来代理远程公共仓库,如Maven中央仓库。 - **Group**:仓库组,用来合并多个Hosted/Proxy仓库,便于项目的资源使用。 对于构建私有Maven仓库,重点关注的几个预置仓库包括: 1. **...
5. **仓库管理 (Repository Management)**: Maven使用本地仓库(Local Repository)存储项目依赖,同时与远程仓库(Remote Repository)交互,如中央仓库(Central Repository),获取或上传项目构件。 **二、Maven...
1. **添加代理仓库**: 对于不在Maven中央仓库的第三方插件,可以在Nexus中创建一个新的代理仓库,指向提供该插件的远程仓库。 2. **手动上传**: 如果第三方插件无法通过代理获取,可以手动将jar包上传至Nexus的宿主...
- **代理远程仓库**:配置Nexus作为中央仓库和其他公开的Maven仓库的代理,所有构件都将从Nexus下载,Nexus会自动从外部仓库下载缺失的构件。 - **本地宿主仓库**:在服务器上建立本地的宿主仓库,用于存放组织...
Maven的中央仓库包含了大量的开源项目构件,如JAR文件,这些构件是开发Java应用时常用的依赖。当项目构建时,Maven会自动从中央仓库下载所需的依赖。然而,对于公司内部或特定项目的私有依赖,就需要建立私有仓库,...
3. **配置仓库**:登录Nexus管理界面,创建不同的仓库类型,如代理仓库(proxy repository)连接到Maven中央仓库,以及宿主仓库(hosted repository)用于存放自定义构件。 4. **配置Maven**:在`settings.xml`文件...
- **Central**:代理Maven中央仓库中的发布版本构件。 - **CentralM1shadow**:提供M1格式的发布版本构件镜像。 - **CodehausSnapshots**:代理Codehaus快照版本构件。 - **Releases**:部署管理内部的发布版本构件...
Nexus不仅可以作为一个中央仓库的代理,还支持创建自己的存储库,方便组织内部共享依赖,提高开发效率。以下是详细的搭建步骤: 1. **JDK的安装配置** - 首先,你需要从Oracle官方网站下载适用于Linux的JDK安装包...
Maven通过中央仓库获取项目所需的第三方库,开发者只需在POM文件中声明依赖,Maven会自动下载并管理这些依赖。此外,开发者还可以自定义本地仓库或设置私有远程仓库来存储依赖。 对于部署原理,Maven提供了多种部署...
1. **中央仓库代理**:Nexus可以作为一个代理,缓存常用的Maven中央仓库中的工件,减少网络延迟,提高下载速度。 2. **托管仓库**:你可以将自己项目的构件(如JAR、WAR等)上传到Nexus,创建私有的、安全的存储库...
在实际的企业开发中经常会遇到的问题:在进行Maven项目开发时,所需要的构件都是通过Maven的中央仓库或者第三方的Maven仓库下载到本地,那么企业内部开发使用也会遇到一些问题,团队内的每个使用者都需要去下载相应...
- **proxy**:代理远程公共仓库,如maven中央仓库。 - **group**:合并多个hosted/proxy仓库,方便配置Maven依赖。 - **配置Maven使用Nexus**:通过修改`$user_home/.m2/settings.xml`文件中的Repository配置来...