转载

将我的java程序组件部署到maven中央仓库

前一阵子工作有点忙,也比较焦虑。没有时间写一些博客文章,今天来补充一下。

想要解锁更多新姿势?请访问我的博客。:smirk:

做点什么?

面临毕业,不想一直咸鱼,可是又什么都不会,做点什么的?思来想去,也是为了给自己少一点麻烦,就决定把自己半年前那个 秒杀商城项目 重构一下,放到云平台上。不过既然都是云平台了,肯定会有各种支撑服务,就譬如说缓存中心,日志中心,监控中心,权限管理中心等等,但是这些功能,在别的项目中也可以用到,这就带来一些不必要的麻烦。

这时候,就推荐使用maven来统一管理了。

前些日子,趁着毕业生创业指导开课的时候,我把缓存中心敲完了。然后将他部署到maven中央仓库。下面我就来分享一下部署到中央仓库的那些坑 。

部署到中央仓库

准备工作

  • 打开浏览器, sonatype 官网 ,这个地址,注册一个账号,并且记住用户名密码

  • 下载好 git 客户端

提交issue

在 https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134 中新建一个“Project ticket”。

下面引以下 Spiderman.L 大佬博客上的图片(太懒了不想重新填一遍),照着这个步骤来。

将我的java程序组件部署到maven中央仓库

点击 Create 之后,你就会进入一个 jira 页面(sonatype 使用jira 来追踪每一个项目进度),与此同时你注册时使用的邮箱中也会收到一封邮件提示你,任务创建成功,正在等待处理。

等待时间

创建完毕后就等待一段时间,刷新页面。当状态变为 “resolved” ,然后你就可以使用 maven 上传项目了。或者就等着接收 sonatype 的反馈邮件,确认已经为你创建好了新项目

将我的java程序组件部署到maven中央仓库

回复commit

发布完后,可能几分钟,也可能几小时,会有工作人员问你是否有Group Id对应的那个域名的所有权,如果有的话就回复有,并且按照他说的三个方法来(下图为参考语句),然后就会得到Configuration has been prepared的回复,这个时候就可以准备发布了。

将我的java程序组件部署到maven中央仓库

我用的是第一个方法,因为我的域名是从阿里云上买的,我在阿里云平台的域名管理中心处,添加了一个TXT记录到这个 ticket 上,这样他会自己检测。

当然了,如果自己没有域名的话可以挂在开源的域名下面,例如com.github.tengshe789,这样一样可以发布。

最差的方法,就是用个人域名邮箱发送给他邮件。

获得部署权限

做完上一步,他会在美国工作日时间里回复部署的相关信息,如图:

将我的java程序组件部署到maven中央仓库

当我们的 ticket 最终状态变为 Resolved 的时候,表示我们有权限可以上传东西了。

maven本地设置

找到你安装maven的目录下面,打开 maven目录/conf/settings.xml 文件。在 servers 标签中填写如下信息

<servers> 
  <server>
    <id>sonatype-nexus-snapshots</id>
    <username>tengshe789(我的用户名)</username>
    <password>(我的sonatype密码)</password>
  </server>
  <server>
    <id>sonatype-nexus-staging</id>
    <username>tengshe789(我的用户名)</username>
    <password>(我的sonatype密码)</password>
  </server>
</servers>

java程序pom.XML设置

按照下面代码添加。

<scm>
     <connection>scm:git:https://github.com/tengshe789/miaocache.git</connection> <developerConnection>scm:git:https://github.com/tengshe789/miaocache.git</developerConnection>
     <url>https://github.com/tengshe789/miaocache</url>
     <tag>0.0.1</tag>
 </scm>

这些地址填的是你github上的地址。

<distributionManagement>
    <snapshotRepository>
        <!-- 这个id与我上一步在setting.xml中设置的id一致的  -->
        <id>sonatype-nexus-snapshots</id>
        <name>OSS Snapshots Repository</name>
        <!-- 这里的url就是Issue中回复的snapshots 的repo地址-->
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
     <!-- 这个id与我上一步在setting.xml中设置的id一致的  -->
        <id>sonatype-nexus-staging</id>
        <name>OSS Staging Repository</name>
        <!-- 这里的url就是Issue中回复的staging 的repo地址-->
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
    </repository>
</distributionManagement>

这些地址直接复制上就行。

    <build>
        <finalName>${project.name}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                    <configuration>
                        <finalName>${project.build.finalName}</finalName>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <target>${maven.compiler.target}</target>
                    <source>${maven.compiler.source}</source>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <!--阿里云主仓库,代理了maven central和jcenter仓库-->
        <repository>
            <id>aliyun</id>
            <name>aliyun</name>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <!--阿里云代理Spring 官方仓库-->
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://maven.aliyun.com/repository/spring</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <!--阿里云代理Spring 插件仓库-->
        <pluginRepository>
            <id>spring-plugin</id>
            <name>spring-plugin</name>
            <url>https://maven.aliyun.com/repository/spring-plugin</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.2.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.9.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
            <distributionManagement>
                <snapshotRepository>
                    <id>sonatype-nexus-snapshots</id>
                    <name>OSS Snapshots Repository</name> <url>https://oss.sonatype.org/content/repositories/snapshots</url>
                </snapshotRepository>
                <repository>
                    <id>sonatype-nexus-staging</id>
                    <name>OSS Staging Repository</name>
                    <!-- 这里的url就是Issue中回复的staging 的repo地址--> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
                </repository>
            </distributionManagement>
        </profile>
    </profiles>
</project>

下面地址是通用的插件和profiles配置,不能少,按照需求来设置。有能力的同学自己研究一下。

使用gpg生成密钥

打开git窗口,输入 gpg --gen-key 。这时候会出现一大片英文,看不懂的同学不要紧,跟着我做就行。

gpg --list-keys

这个命令是查看自己key的编号。找到 pub对应的那个编号,例如 pub 2048R/8C473F5C
上传到key验证库:

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 8C473F5C

maven命令

打开idea,找到下面的终端,输入maven命令。

mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=设置gpg设置密钥时候输入的Passphrase"
原文  https://blog.tengshe789.tech/2019/01/17/将我的程序组件注册到maven/
正文到此结束
Loading...