
将java库发布到maven中央仓库(如通过sonatype ossrh)不仅仅是上传项目的主jar包。为了提供完整的开发体验和满足仓库规范,通常需要提供以下构件:
如果缺少上述任何一个构件(特别是源码、Javadoc或GPG签名),部署到Sonatype OSSRH的暂存仓库时可能会失败,或者即使部署成功,用户在IDE中导入依赖时也无法看到Javadoc和源码。
要确保源码、Javadoc和GPG签名构件被正确生成并附加到部署中,需要在项目的 pom.xml 文件中配置相应的Maven插件。
maven-source-plugin 用于生成包含项目源代码的JAR包。关键在于将其配置为在Maven的生命周期中执行 attach-sources 目标。
<plugin>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal> <!-- 推荐使用jar-no-fork,避免不必要的fork -->
</goals>
</execution>
</executions>
</plugin>注意: jar-no-fork 目标通常在 package 阶段执行,它会在不创建新进程的情况下生成源码JAR。
立即学习“Java免费学习笔记(深入)”;
maven-javadoc-plugin 用于生成包含项目API文档的JAR包。同样,需要配置其在Maven生命周期中执行 attach-javadocs 目标。
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 根据项目使用的Java版本配置 -->
<source>16</source>
<!-- 如果Javadoc生成有警告或错误,可配置忽略 -->
<!-- <failOnError>false</failOnError> -->
<!-- <doclint>none</doclint> -->
</configuration>
</plugin>注意: jar 目标通常在 package 阶段执行,它会生成Javadoc JAR。source 配置应与项目编译时使用的JDK版本匹配。
maven-gpg-plugin 用于对所有待部署的构件进行GPG签名。这是Sonatype OSSRH强制要求的,如果缺少签名,部署到暂存仓库会失败。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version> <!-- 推荐使用较新版本,如1.6或更高 -->
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase> <!-- 通常在verify阶段执行签名 -->
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>注意:
在能够使用 maven-gpg-plugin 之前,你需要在本地系统上生成一个GPG密钥对。
gpg --full-generate-key
按照提示选择密钥类型(通常是RSA and RSA)、密钥长度(推荐4096位)、有效期(无有效期或设置一个较长的时间),然后输入你的真实姓名、电子邮件地址和注释。最后,设置一个强密码来保护你的私钥。
虽然 maven-gpg-plugin 在执行 sign 目标时会直接从GPG代理获取密钥,但为了更明确地指定使用的密钥,可以在Maven的 settings.xml 文件中配置。这在某些自动化环境中特别有用。
在 ~/.m2/settings.xml 文件中添加 profile:
<settings>
<!-- ... 其他配置 ... -->
<profiles>
<profile>
<id>gpg</id>
<properties>
<!-- 替换为你的GPG密钥ID -->
<gpg.keyname>你的GPG密钥ID</gpg.keyname>
<!-- 如果你的GPG密钥有密码,可以在这里配置,但通常不推荐在settings.xml中明文存储密码 -->
<!-- <gpg.passphrase>你的GPG密钥密码</gpg.passphrase> -->
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>gpg</activeProfile>
</activeProfiles>
</settings>警告: 在 settings.xml 中明文存储GPG密码存在安全风险。通常建议在部署时手动输入密码,或使用Maven加密密码功能。
distributionManagement 部分定义了项目部署到远程仓库的信息。对于Sonatype OSSRH,你需要配置快照仓库和发布仓库的URL。
<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>注意: id 字段 (ossrh) 必须与你在 ~/.m2/settings.xml 中配置的服务器认证信息(server 块)的 id 匹配。
完成上述配置后,可以执行部署命令:
清理并部署:
mvn clean deploy
执行此命令时,Maven会:
Sonatype OSSRH暂存仓库操作:
GPG签名失败或提示缺少密钥:
Sonatype暂存仓库关闭失败:
IDE中仍看不到Javadoc:
成功将Maven项目发布到中央仓库,并确保Javadoc和源码可供用户使用,需要对Maven的构建生命周期、插件配置和Sonatype OSSRH的部署流程有清晰的理解。核心在于:正确配置 maven-source-plugin 和 maven-javadoc-plugin 以生成并附加源码和Javadoc JAR包,并使用 maven-gpg-plugin 对所有构件进行签名。 遵循这些步骤,并仔细处理Sonatype的暂存仓库验证,将确保你的项目以完整的姿态呈现在全球开发者面前。
以上就是Maven项目部署至中央仓库:确保Javadoc和源码完整发布的指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号