ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一篇搞定发布自己的类库到Maven中央仓库 [打印本页]

作者: 道家人    时间: 2024-2-15 17:30
标题: 一篇搞定发布自己的类库到Maven中央仓库
在Maven项目中,90%以上的jar包是通过pom文件直接从开源仓库中获取依赖jar包文件,然后在项目中进行集成使用。
此时如果你有一个开源项目,那么如何将该开源项目发布到Maven中央仓库,让其他人可以方便的使用,而不是先下载jar,然后install的本地?
本文将通过一步步的操作带领大家讲自己的开源项目发布到Maven中央仓库(Maven Central Repository)中,https://mvnrepository.com/。
Maven中央仓库并不支持直接发布jar包,需要将jar包发布到一些指定的第三方Maven仓库,然后该仓库再将jar包同步到Maven中央仓库,Sonatype便是这样的角色
准备工作

项目发布申请

安装GPG

发布到Maven仓库中的所有文件都要使用GPG签名,以保障完整性。因此,我们需要在本地安装并配置GPG。
配置setting.xml

setting.xml为Maven的全局配置文件,一般路径为$MAVEN_HOME/conf/settings.xml
找到Services节点进行如下配置
  1. <servers>
  2.     <server>
  3.         <id>ossrh</id>
  4.         <username>你的Sonatype账号</username>
  5.         <password>你的Sonatype密码</password>
  6.     </server>
  7. </servers>
复制代码
找到profiles节点进行如下配置,gpg.executable节点建议配置第二个安装包安装的gpg路径,这一步一定要做不然容易发布的时候提示找不到gpg。
  1. <profiles>
  2.       <profile>
  3.           <id>ossrh</id>
  4.           <activation>
  5.               <activeByDefault>true</activeByDefault>
  6.           </activation>
  7.           <properties>
  8.               <gpg.executable>"D:\Program Files (x86)\GnuPG\bin\gpg.exe"</gpg.executable>
  9.               <gpg.passphrase>你的密钥创建时候的密码</gpg.passphrase>
  10.           </properties>
  11.       </profile>
  12. </profiles>
复制代码
配置pom.xml

以下为一些关键点的配置示例
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.    
  7.     <name>fluent-validation</name>
  8.     <url>https://github.com/yikuaibaiban/fluent-validation</url>
  9.     <description>fluent-validation is a streaming validation framework.</description>
  10.    
  11.     <issueManagement>
  12.         <system>Github Issue</system>
  13.         <url>https://github.com/yikuaibaiban/fluent-validation/issues</url>
  14.     </issueManagement>
  15.     <licenses>
  16.         <license>
  17.             <name>The Apache Software License, Version 2.0</name>
  18.             <url>https://apache.org/licenses/LICENSE-2.0.txt</url>
  19.         </license>
  20.     </licenses>
  21.    
  22.     <developers>
  23.         <developer>
  24.             <name>yikuaibaiban</name>
  25.             <email>xxxx@xxxx.com</email>
  26.             <timezone>+8</timezone>
  27.         </developer>
  28.     </developers>
  29.    
  30.     <scm>
  31.         <url>https://github.com/yikuaibaiban/fluent-validation</url>
  32.         <connection>scm:https://github.com/yikuaibaiban/fluent-validation.git</connection>
  33.         <developerConnection>scm:git:https://github.com/yikuaibaiban/fluent-validation.git</developerConnection>
  34.     </scm>
  35.     <properties>
  36.         <maven.compiler.source>8</maven.compiler.source>
  37.         <maven.compiler.target>8</maven.compiler.target>
  38.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  39.     </properties>
  40.     <build>
  41.         <plugins>
  42.             <plugin>
  43.                 <groupId>org.apache.maven.plugins</groupId>
  44.                 <artifactId>maven-compiler-plugin</artifactId>
  45.                 <version>3.8.1</version>
  46.                 <configuration>
  47.                     <source>${maven.compiler.source}</source>
  48.                     <target>${maven.compiler.target}</target>
  49.                     <encoding>${project.build.sourceEncoding}</encoding>
  50.                 </configuration>
  51.             </plugin>
  52.         </plugins>
  53.     </build>
  54.     <profiles>
  55.         <profile>
  56.             <id>release</id>
  57.             <build>
  58.                 <plugins>
  59.                     
  60.                     <plugin>
  61.                         <groupId>org.apache.maven.plugins</groupId>
  62.                         <artifactId>maven-source-plugin</artifactId>
  63.                         <version>2.2.1</version>
  64.                         <executions>
  65.                             <execution>
  66.                                 <id>attach-sources</id>
  67.                                 <goals>
  68.                                     <goal>jar-no-fork</goal>
  69.                                 </goals>
  70.                             </execution>
  71.                         </executions>
  72.                     </plugin>
  73.                     
  74.                     <plugin>
  75.                         <groupId>org.apache.maven.plugins</groupId>
  76.                         <artifactId>maven-javadoc-plugin</artifactId>
  77.                         <version>3.5.0</version>
  78.                         <configuration>
  79.                             <windowtitle>${project.name}</windowtitle>
  80.                             <doctitle>${project.name}</doctitle>
  81.                             <show>private</show>
  82.                             <detectLinks>false</detectLinks>
  83.                             <detectOfflineLinks>true</detectOfflineLinks>
  84.                             <linksource>true</linksource>
  85.                             <detectJavaApiLink>true</detectJavaApiLink>
  86.                             <source>8</source>
  87.                         </configuration>
  88.                         <executions>
  89.                             <execution>
  90.                                 <id>attach-javadocs</id>
  91.                                 <goals>
  92.                                     <goal>jar</goal>
  93.                                 </goals>
  94.                             </execution>
  95.                         </executions>
  96.                     </plugin>
  97.                     
  98.                     <plugin>
  99.                         <groupId>org.apache.maven.plugins</groupId>
  100.                         <artifactId>maven-gpg-plugin</artifactId>
  101.                         <version>1.6</version>
  102.                         <executions>
  103.                             <execution>
  104.                                 <phase>verify</phase>
  105.                                 <goals>
  106.                                     <goal>sign</goal>
  107.                                 </goals>
  108.                             </execution>
  109.                         </executions>
  110.                     </plugin>
  111.                 </plugins>
  112.             </build>
  113.             <distributionManagement>
  114.                 <snapshotRepository>
  115.                     <id>ossrh</id>
  116.                     <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
  117.                 </snapshotRepository>
  118.                 <repository>
  119.                     <id>ossrh</id>
  120.                     <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  121.                 </repository>
  122.             </distributionManagement>
  123.         </profile>
  124.     </profiles>
  125. </project>
复制代码
发布到Maven中央仓库

推送代码

后续操作(必须要操作)

此时进入https://s01.oss.sonatype.org并登录(登录的账号密码与刚开始注册的账号密码一致)查看发布好的构件,点击左侧的Staging Repositories。
此时需注意,如果项目中版本信息为1.0.0-SNAPSHOT,即SNAPSHOT为后缀,则发布的项目位于Snapshots目录下。在左上角的Artifact Search中能够搜到。
如果是Release后缀,则可直接在Staging Repositories中看到(有可能要稍等一下,等待平台处理)。
选中对于的repository之后,点击的close,close时会检查发布的构件是否符合要求。若符合要求,则close成功,成功之后点击箭头所指的release,即可正式将jar包发布到Sonatype OSSRH仓库。

当点击Release之后,邮件中会收到Issues变化的信息,提示同步已经被激活,正常10分钟就可以更新同步。
release成功大概2个小时之后,该构件就会同步到Maven中央仓库,届时会有邮件通知。
实践过程中发现十分钟之内已经成功同步到https://repo1.maven.org/的中央仓库当中。
逐步的其他Maven仓库,包括阿里镜像都会进行同步。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4