您好,登录后才能下订单哦!
# Maven中如何使用OSSRH中心仓库
## 1. OSSRH简介
### 1.1 什么是OSSRH
OSSRH(OSS Repository Hosting)是Sonatype公司提供的开源软件仓库托管服务,全称为"Open Source Software Repository Hosting"。它是Maven中央仓库(Central Repository)的官方发布通道,开发者通过OSSRH可以将自己的开源项目发布到全球最大的Java/Maven组件仓库中。
### 1.2 OSSRH与Maven中央仓库的关系
- OSSRH是发布通道,中央仓库是最终存储
- 开发者通过OSSRH提交组件后,经过审核会同步到中央仓库
- 中央仓库对所有用户开放读取,但写入必须通过OSSRH
### 1.3 使用OSSRH的优势
1. **全球分发**:组件会被同步到全球CDN节点
2. **长期存储**:Sonatype承诺永久保留合法开源组件
3. **标准化发布**:严格的元数据要求和质量管控
4. **社区可信度**:出现在中央仓库的项目更易获得开发者信任
## 2. 准备工作
### 2.1 注册Sonatype JIRA账号
1. 访问 [issues.sonatype.org](https://issues.sonatype.org)
2. 点击"Sign Up"创建账号
3. 验证邮箱后登录
### 2.2 申请项目命名空间
1. 新建JIRA工单(项目选择"Community Support - Open Source Project Repository Hosting (OSSRH)")
2. 提供以下信息:
- GroupId(通常使用反向域名如com.github.yourname)
- 项目名称和描述
- 项目URL和SCM地址
- 开源许可证
3. 等待审核(通常1-2个工作日)
### 2.3 安装配置GPG
```bash
# Linux/macOS安装示例
brew install gnupg # macOS
sudo apt-get install gnupg # Ubuntu
# 生成密钥对
gpg --full-generate-key
# 列出密钥
gpg --list-keys
# 发布公钥到服务器
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys YOUR_KEY_ID
<!-- ~/.m2/settings.xml -->
<settings>
<servers>
<server>
<id>ossrh</id>
<username>你的JIRA用户名</username>
<password>你的JIRA密码</password>
</server>
</servers>
<profiles>
<profile>
<id>gpg</id>
<properties>
<gpg.executable>gpg</gpg.executable>
<gpg.passphrase>你的GPG密码</gpg.passphrase>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>gpg</activeProfile>
</activeProfiles>
</settings>
<project>
<!-- 必须配置的基本信息 -->
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.yourname</groupId>
<artifactId>your-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>Your Project Name</name>
<description>Detailed project description</description>
<url>https://github.com/yourname/your-project</url>
<!-- SCM配置 -->
<scm>
<connection>scm:git:git://github.com/yourname/your-project.git</connection>
<developerConnection>scm:git:ssh://github.com/yourname/your-project.git</developerConnection>
<url>https://github.com/yourname/your-project</url>
</scm>
<!-- 许可证 -->
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<!-- 开发者信息 -->
<developers>
<developer>
<name>Your Name</name>
<email>your.email@example.com</email>
<organization>Your Organization</organization>
</developer>
</developers>
</project>
<project>
<!-- 发布管理配置 -->
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
</distributionManagement>
<!-- 构建插件配置 -->
<build>
<plugins>
<!-- Source JAR生成 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Javadoc JAR生成 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.2</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- GPG签名 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Nexus Staging插件 -->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.13</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
</plugins>
</build>
</project>
# 清理并构建项目
mvn clean install
# 验证POM配置
mvn validate
# 检查依赖和许可证
mvn dependency:tree
mvn license:check
# 快照版本会自动上传到快照仓库
mvn -DskipTests deploy
准备发布版本:
mvn versions:set -DnewVersion=1.0.0
构建并部署:
mvn clean deploy -P release
登录OSSRH控制台:
设置新开发版本:
mvn versions:set -DnewVersion=1.1.0-SNAPSHOT
提交版本变更:
git add pom.xml
git commit -m "Prepare for next development iteration"
git push
错误信息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project xxx:
Failed to deploy artifacts: Could not transfer artifact xxx from/to ossrh (https://s01.oss.sonatype.org/...):
Authentication failed for https://s01.oss.sonatype.org/... 401 Unauthorized
解决方案:
1. 检查settings.xml
中的<server>
配置
2. 确保用户名密码正确
3. 尝试在密码中使用加密令牌(JIRA账户设置中生成)
错误信息:
gpg: signing failed: Inappropriate ioctl for device
解决方案:
# Linux/macOS解决方案
export GPG_TTY=$(tty)
# 或者在gpg命令中添加
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
常见错误: - Missing POM: …/pom.xml - Invalid POM: …/pom.xml
检查清单: 1. 确保所有必填字段完整(description, url, license等) 2. 检查依赖声明的scope是否正确 3. 验证SCM配置是否可访问
现象:发布成功后中央仓库不可见
处理建议: 1. 通常需要2-4小时同步 2. 在search.maven.org查询 3. 如果超过24小时未同步,在JIRA工单中询问
-SNAPSHOT
后缀<!-- 父POM配置 -->
<distributionManagement>
<!-- 与单模块项目相同 -->
</distributionManagement>
<!-- 子模块无需重复配置 -->
<!-- 配置CI自动发布 -->
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<configuration>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/...</url>
<releases>
<enabled>true</enabled>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>thirdparty</id>
<url>https://s01.oss.sonatype.org/content/repositories/thirdparty/</url>
</repository>
通过本文,您应该已经掌握了: 1. OSSRH的基本概念和工作原理 2. 从零开始配置Maven项目发布到中央仓库的全流程 3. 常见问题的诊断和解决方法 4. 项目维护的最佳实践
将开源项目发布到Maven中央仓库可以显著提高项目的可见性和可用性。虽然初始配置过程稍显复杂,但一次正确的配置可以带来长期的便利。建议开发者在第一次成功发布后,记录详细的团队内部文档,方便后续版本迭代和团队协作。
命令 | 用途 |
---|---|
mvn clean deploy |
构建并部署到OSSRH |
mvn release:prepare |
准备发布版本 |
mvn release:perform |
执行发布 |
mvn nexus-staging:release |
手动触发发布 |
”`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。