将jar包发布到maven的中央仓库细节整理
在学习springboot框架的时候,会引入各种各样的starter依赖,照着教程尝试写了个demo-spring-boot-stater,可以理解为一个组件,随引随用
但是只能自己引用,无法共享,于是想将其发布到maven中央仓库
网上参考了些发布到maven中央仓库的教程
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑
大致流程
-
注册sonatype并提交issue工单
-
认证域名
-
GPG生成密钥
-
制作jar包
-
发布jar包
上面一些文章操作的都很详细,在此记录下自己遇到的些问题以及解决方式
- pom.xml校验挺严格,比如必须要有url,description,scm,developers,licenses,source,javadoc,gpg
- 前一阵子正好是70周年大庆,不能脑壳疼
- deploy操作时,出现roject description missing, Project URL missing 错误提示已经很明确了,pom.xml中缺少description和url,可见发布的时候对pom.xml的校验比较严格,也确实,毕竟到时候是需要显示的
- 代码中的文档注释,必须明确,参数不能瞎写,因为pom.xml引入了javadoc插件,生成文档的时候回报错
- 由于我是windows环境,在cmd窗口执行的时候,会出现找不到gpg命令,解决方式,使用power shell解决
- deploy操作时出现504网关错误,这没事,只是不巧赶上了人家服务错误的问题
如下是完整的pom.xml,最精简版
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.chendahai</groupId> <artifactId>demo-spring-boot-starter</artifactId> <version>1.1.2</version> <packaging>jar</packaging> <name>demo-spring-boot-starter</name> <description>spring-boot-starter-demo</description> <url>https://github.com/chywx/demo-spring-boot-starter</url> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!--licenses信息--> <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> </license> </licenses> <!--scm信息--> <scm> <url>http://chendahai.cn</url> <connection>scm:git:https://github.com/chywx/demo-spring-boot-starter.git</connection> <developerConnection>scm:git:https://github.com/chywx/demo-spring-boot-starter.git</developerConnection> </scm> <!--发布者信息--> <developers> <developer> <name>chenhaiyang</name> <email>chy1559843332@outlook.com</email> <organization>http://chendahai.cn</organization> <organizationUrl>http://chendahai.cn</organizationUrl> </developer> </developers> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--Compiler--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> <!--source--> <plugin> <artifactId>maven-source-plugin</artifactId> <version>3.0.1</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <!--javadoc--> <plugin> <artifactId>maven-javadoc-plugin</artifactId> <version>2.10.4</version> <configuration> <charset>UTF-8</charset> </configuration> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <!-- gpg plugin,用于签名认证 --> <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> <!--staging puglin,用于自动执行发布阶段(免手动)--> <plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.7</version> <extensions>true</extensions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin> <!-- release plugin,用于发布到release仓库部署插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-release-plugin</artifactId> <version>2.4.2</version> </plugin> </plugins> </build> <!--定义snapshots库和releases库的nexus地址--> <distributionManagement> <snapshotRepository> <!--oss需要对应到settings.xml下的service的id--> <id>ossrh</id> <url>https://oss.sonatype.org/content/repositories/snapshots/</url> </snapshotRepository> <repository> <id>ossrh</id> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </project>
maven的settings.xml
<!--需要添加--> <server> <id>ossrh</id> <username>sonatype账号</username> <password>sonatype密码</password> </server>
特别说明下nexus-staging-maven-plugin插件
<plugin> <groupId>org.sonatype.plugins</groupId> <artifactId>nexus-staging-maven-plugin</artifactId> <version>1.6.7</version> <extensions>true</extensions> <configuration> <serverId>ossrh</serverId> <nexusUrl>https://oss.sonatype.org/</nexusUrl> <autoReleaseAfterClose>true</autoReleaseAfterClose> </configuration> </plugin>
staging puglin,用于自动执行发布阶段(免手动)
因为deploy之后,默认状态为open,你需要在后台https://oss.sonatype.org 手动closed,再release
当然,加上这个插件,将autoReleaseAfterClose指定为true,即可自动发布
Release完成后,约需要等待两三个小时,在 https://search.maven.org 和 https://mvnrepository.com 便可以搜到自己发布的依赖了!!!!
同步到第三方仓库,如阿里云等会更慢
如下为完整的deploy日志
PS C:\Users\Administrator> cd D:/MyProject/demo-spring-boot-starter PS D:\MyProject\demo-spring-boot-starter> mvn clean deploy '-Dmaven.test.skip=true' [WARNING] [WARNING] Some problems were encountered while building the effective settings [WARNING] expected START_TAG or END_TAG not TEXT (position: TEXT seen ...mojo" if these are not already contained in the list.\n |-->\n <p... @79:5) @ D:\maven\apache-maven-3.6.1\bin\..\conf\settings.xml, line 79, column 5 [WARNING] [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for cn.chendahai:demo-spring-boot-starter:jar:1.1.2 [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 66, column 21 [WARNING] 'build.plugins.plugin.version' for org.springframework.boot:spring-boot-maven-plugin is missing. @ line 61, column 21 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] Inspecting build with total of 1 modules... [INFO] Installing Nexus Staging features: [INFO] ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin [INFO] [INFO] ---------------< cn.chendahai:demo-spring-boot-starter >---------------- [INFO] Building demo-spring-boot-starter 1.1.2 [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo-spring-boot-starter --- [INFO] Deleting D:\MyProject\demo-spring-boot-starter\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo-spring-boot-starter --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 1 resource [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo-spring-boot-starter --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! [INFO] Compiling 3 source files to D:\MyProject\demo-spring-boot-starter\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo-spring-boot-starter --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ demo-spring-boot-starter --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo-spring-boot-starter --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo-spring-boot-starter --- [INFO] Building jar: D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.jar [INFO] [INFO] >>> maven-source-plugin:3.0.1:jar (attach-sources) > generate-sources @ demo-spring-boot-starter >>> [INFO] [INFO] <<< maven-source-plugin:3.0.1:jar (attach-sources) < generate-sources @ demo-spring-boot-starter <<< [INFO] [INFO] [INFO] --- maven-source-plugin:3.0.1:jar (attach-sources) @ demo-spring-boot-starter --- [INFO] Building jar: D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-sources.jar [INFO] [INFO] --- maven-javadoc-plugin:2.10.4:jar (attach-javadocs) @ demo-spring-boot-starter --- [WARNING] Source files encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! [INFO] 正在加载程序包cn.chendahai.demo的源文件... 正在构造 Javadoc 信息... 标准 Doclet 版本 1.8.0_211 正在构建所有程序包和类的树... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\DemoService.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\DemoServiceProperties.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\DemoStarterEnableAutoConfiguration.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\package-frame.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\package-summary.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\package-tree.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\constant-values.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\class-use\DemoStarterEnableAutoConfiguration.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\class-use\DemoServiceProperties.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\class-use\DemoService.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\cn\chendahai\demo\package-use.html... 正在构建所有程序包和类的索引... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\overview-tree.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\index-all.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\deprecated-list.html... 正在构建所有类的索引... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\allclasses-frame.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\allclasses-noframe.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\index.html... 正在生成D:\MyProject\demo-spring-boot-starter\target\apidocs\help-doc.html... [INFO] Building jar: D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-javadoc.jar [INFO] [INFO] --- maven-gpg-plugin:1.6:sign (sign-artifacts) @ demo-spring-boot-starter --- [INFO] [INFO] --- maven-install-plugin:2.4:install (default-install) @ demo-spring-boot-starter --- [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.jar to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.jar [INFO] Installing D:\MyProject\demo-spring-boot-starter\pom.xml to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.pom [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-sources.jar to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-sources.jar [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-javadoc.jar to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-javadoc.jar [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.jar.asc to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.jar.asc [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.pom.asc to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.pom.asc [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-sources.jar.asc to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-sources.jar.asc [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-javadoc.jar.asc to D:\maven\mymaven\repository\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-javadoc.jar.asc [INFO] [INFO] --- nexus-staging-maven-plugin:1.6.7:deploy (injected-nexus-deploy) @ demo-spring-boot-starter --- [INFO] Performing local staging (local stagingDirectory="D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging")... [INFO] + Using server credentials "ossrh" from Maven settings. [INFO] * Connected to Nexus at https://oss.sonatype.org:443/, is version 2.14.14-01 and edition "Professional" [INFO] * Using staging profile ID "ba067c55e451" (matched by Nexus). [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.jar to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.jar [INFO] Installing D:\MyProject\demo-spring-boot-starter\pom.xml to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.pom [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-sources.jar to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-sources.jar [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-javadoc.jar to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-javadoc.jar [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.jar.asc to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.jar.asc [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2.pom.asc to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2.pom.asc [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-sources.jar.asc to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-sources.jar.asc [INFO] Installing D:\MyProject\demo-spring-boot-starter\target\demo-spring-boot-starter-1.1.2-javadoc.jar.asc to D:\MyProject\demo-spring-boot-starter\target\nexus-staging\staging\ba067c55e451\cn\chendahai\demo-spring-boot-starter\1.1.2\demo-spring-boot-starter-1.1.2-javadoc.jar.asc [INFO] Performing remote staging... [INFO] [INFO] * Remote staging into staging profile ID "ba067c55e451" [INFO] * Created staging repository with ID "cnchendahai-1038". [INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038 [INFO] * Uploading locally staged artifacts to profile cn.chendahai Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.pom.asc Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.pom.asc (499 B at 175 B/s) Downloading from ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/maven-metadata.xml Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/maven-metadata.xml Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/maven-metadata.xml (316 B at 86 B/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-sources.jar Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-sources.jar (4.5 kB at 799 B/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-javadoc.jar.asc Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-javadoc.jar.asc (499 B at 1.0 kB/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.jar Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.jar (5.2 kB at 830 B/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.pom Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.pom (5.7 kB at 3.0 kB/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.jar.asc Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2.jar.asc (499 B at 1.0 kB/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-javadoc.jar Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-javadoc.jar (35 kB at 6.0 kB/s) Uploading to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-sources.jar.asc Uploaded to ossrh: https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnchendahai-1038/cn/chendahai/demo-spring-boot-starter/1.1.2/demo-spring-boot-starter-1.1.2-sources.jar.asc (499 B at 1.0 kB/s) [INFO] * Upload of locally staged artifacts finished. [INFO] * Closing staging repository with ID "cnchendahai-1038". Waiting for operation to complete... ...... [INFO] Remote staged 1 repositories, finished with success. [INFO] Remote staging repositories are being released... Waiting for operation to complete... ..... [INFO] Remote staging repositories released. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 01:55 min [INFO] Finished at: 2019-10-12T10:38:48+08:00 [INFO] ------------------------------------------------------------------------ PS D:\MyProject\demo-spring-boot-starter> PS D:\MyProject\demo-spring-boot-starter>
面朝大海```春暖花开