maven里有本身的项目吗?今天我就来发布个本身的包

这是我参与更文挑战的第13天,活动详情查看: 更文挑战java

[TOC]linux

bottom.png maven项目的发布git

平时开发中都是使用别人的maven项目,做为一个标准的程序员发布个本身的程序也是必要的。程序员

工单申请

  • 在发布前,您须要有本身的项目主页并开源的代码,您可使用GitHub或者码云,下面的内容以Oschina为例,换句话说咱们须要将咱们的项目源码发布到码云平台上。毕竟maven是开源精神。因此必须须要将你的源码提供给maven

注册Sonatype OSSRH

  • 其次,咱们须要在sonatype平台申请,若是有帐号就直接登陆sonatype登陆,没有的话在登陆界面也能够点击注册github

  • 注册完帐号以后咱们能够登陆sonatype平台,开始建立工单apache

建立工单

  • 如今我建立好了本地项目,坐标是
<groupId>com.github.zxhTom</groupId>
<artifactId>csdn-sdk</artifactId>
<version>1.0.0</version>
复制代码
  • 那么我建立的工单信息以下

工单详情 工单成功

  • 建立完工单咱们须要等待3~5分钟,咱们就会收到邮件告诉咱们工单建立成功!这里的邮箱是在注册的时候填写的,这里就很少说了。建立完工单咱们能够在本身帐号中查找也能够去首页查找,应为是刚建立的在首页中最近的几条工单信息中会出现咱们的工单列表(首页是按时间倒叙的)。因此在查找之前建立的工单是咱们只能去本身工单列表中查找。

工单列表

工单参数

属性值 属性解释
Summary 这就是项目说明,你直接能够写我的项目,搞个统称就行
Project URL 你就填写你的github或者git.oschina.net 的,或者我的主页也行
SCM URL 写成和Project URL 同样也没啥事
username 用户名

这里须要特别说明的是 Group Id,若是你是托管在 Github 或者 Git@OSC 可使用 com.github.binarylei 或者 net.oschina.XXX,剩下的能够依照实际状况填写,例如托管的地址等等(托管地址等信息会在用去 maven 仓库搜索的时候显示,用来帮助用户找到你的项目地址寻求帮助)。另外此处填写的 groupId 必须和你要发布的组件的 pom 中的 groupIdd 同样,必须同样!!!windows

工单等待

  • 上面咱们已经成功建立了工单,可是审核仍是须要等待一会的。正常等待1~5小时。这个看我的运气。个人如今仍在等待中。等待的过程一切工单的状态客服人员都会在你的工单下comments下进行评论的,咱们也能够(必须)在下面对客服人员的问题进行回复。

comments

-----------------------------------漫长的等待-----------------------------------缓存

  • 好了通过漫长的等待,咱们建立的工单终于获得了回复。由于com.github.zxhTom这个groupid我以前注册申请过,因此这里sonatype回复我不会再次给我建立工单,让我使用以前那个工单。下面来看看两张工单

![oytmxyuek.bkt.clouddn.com/20181008005…]安全

![oytmxyuek.bkt.clouddn.com/20181008006…]markdown

  • 上面的是我以前建立的工单,能够看到我在评论去的评论。这是我在和sonatype沟通。其中出现以下回复说明咱们的建立没有问题

![oytmxyuek.bkt.clouddn.com/20181008007…]

  • 咱们就能够发布咱们的项目了,发布成功后工单会自动回复信息,告诉咱们其余仓库同步的事情。而后你能够礼貌性回复下

![oytmxyuek.bkt.clouddn.com/20181008008…]

gpg2加解密

  • 下载好gpg以后咱们就傻瓜式安装,这里不细说

  • gpg --version 查看gpg安装是否成功

gpg版本

  • gpg --gen-key 生成公钥密钥

gpg生成

  • gpg --list-keys 查看公钥 ; 其中pub那一长串就是咱们的就是咱们须要上传的公钥id,gpg的版本不一样所生成的pub id 格式和 长度不一样。咱们不用担忧
  • 生成公钥秘钥的过程须要咱们输入passphrase,这个passphrase就是咱们的凭证,必定要记住
  • ps :
    • Real name: 名字
    • Email address: email地址
    • Comment: 描述评论

查看

  • gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥ID
  • 将公钥发布外网,下图中gpg --list-keys 是在另一台电脑上执行的。版本和上一步那台电脑版本不同。这里是给你们看看斑斑不同致使的pub id .这里咱们只需选择后面字符

发布

  • gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥ID 查看公网公钥

查看公钥

maven配置

  • 在pom中须要配置doc compile等必须插件
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <encoding>UTF-8</encoding>
        <showDeprecation>true</showDeprecation>
        <showWarnings>true</showWarnings>
        <optimize>true</optimize>
        <compilerArguments>
            <verbose/>
            <!-- 若是是linux构建须要将分号缓存冒号:, 若是是windows下则用分号 -->
            <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
        </compilerArguments>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.1.2</version>
    <configuration>
    </configuration>
    <executions>
        <execution>
            <id>attach-sources</id>
            <goals>
                <goal>jar-no-fork</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <charset>UTF-8</charset>
        <docencoding>UTF-8</docencoding>
        <!-- 容许子项目也是用该插件 -->
        <aggregate>true</aggregate>
        <!-- 因为如今该插件比较严谨,该标签是忽略严格验证。好比没有的标签注解能够忽略错误 -->
        <additionalparam>-Xdoclint:none</additionalparam>
    </configuration>
    <executions>
        <execution>
            <id>attach-javadocs</id>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

复制代码
  • 上面的过程是硬性的条件准备。准备好了咱们这一步要作的就是配置这些信息。
  • maven为咱们提供了发布的工程,咱们只须要继承就能够了,可是实际中咱们有本身的基础工程要继承,因此继承只是一种方法。实际上咱们能够本身从新配置。下面分别实现两种方式的配置。读者只需选择其中一种配置 ps : 两种方式选择一中便可>

继承oss-parent

  • 在咱们的项目的pom文件中继承oss-parent
<parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
</parent>
复制代码
  • 而后在pom中增长以下配置 , 具体的配置信息改为本身项目的信息就好了。也是通俗易懂的
<plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <version>1.1</version>
        <executions>
            <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                    <goal>sign</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    </plugins>
    <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>
        <connection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</connection>
        <developerConnection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</developerConnection>
        <url>https://gitee.com/zxhTom/csdnSdk</url>
        <tag>${project.version}</tag>
    </scm>
    <developers>
        <developer>
            <name>zxhTom</name>
            <email>870775401@qq.com</email>
            <roles>
                <role>developer</role>
            </roles>
            <timezone>+8</timezone>
        </developer>
    </developers>
 

复制代码
  • 而后在maven settings中加上以下配置
<servers>
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>Sonatype 帐号</username>
      <password>Sonatype 密码</password>
    </server>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>Sonatype 帐号</username>
      <password>Sonatype 密码</password>
    </server>
  </servers>


复制代码

ps : 这种方式笔者一开始没有采纳,因此没有亲测,可是下面一种方法是我按照第一种变形的。因此这一种应该是能够的。 剩下的咱们就能够mvn clean deploy 进行发布了。发布的过程须要输入gpg passphrase验证。这里只是配置。真正发布下面继续。

![./maven发布/019.png]

只用配置maven 仓库(全局)和项目pom (项目)。

settings.xml配置

  • 在settings.xml的servers节点中添加一个server。在其中加入 server 信息,包含 Sonatype 帐号的用户名与密码

sonatype帐号密码

  • 而后就是maven的远程仓库了。这里配置远程的仓库就是本身选择了。这里很少说给一份默认的远程地址配置
<profile>
      <id>default_maven</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
        <repository>
          <id>central</id>  
          <name>Central Repository</name>  
          <url>http://repo.maven.apache.org/maven2</url>  
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>CentralRepository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

复制代码
  • 到这里基本结束了。由于maven发布须要加解密,上面咱们使用gpg加密,这里须要将gpg的信息配置成一个profile,这样mvn deploy的时候就知道gpg了。这时候配置须要用到以前在发布gpg公钥的时候我让你们记住的东西了passphrase。下图被打马赛克的就是个人passphrase

  • 这里配置了,根据版本不同 有的是gpg , 有的是gpg2 . 读者两个分别试试就知道本身版本适合哪个了

项目pom配置

  • 和第一种同样须要增长Licenses、SCM、Developers信息。 下面多了一个repository这是多余的。读者能够自行去掉。由于这个已经在settings.xml全局中profile中配置了,而且是默认激活的。就算settings中没有配置

maven也是默认读取这个地址的(远程中央仓库)

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
  </plugin>
</plugins>
<licenses>
    <license>
        <name>The Apache License, Version 2.0</name>
        <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
</licenses>
<developers>
    <developer>
        <name>zxhTom</name>
        <email>870775401@qq.com</email>
        <roles>
            <role>developer</role>
        </roles>
        <timezone>+8</timezone>
    </developer>
</developers>
<scm>
    <connection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</connection>
    <developerConnection>scm:git:https://gitee.com/zxhTom/csdnSdk.git</developerConnection>
    <url>https://gitee.com/zxhTom/csdnSdk</url>
    <tag>${project.version}</tag>
</scm>
<repositories>
    <repository>
        <id>maven-central</id>
        <name>maven-central</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

复制代码
  • 惟一不一样的是,此种方法多了distributionManagement。 distributionManagement中的repository和snapshotRepository中的id必定要和settings中server的id保持一致

  • 这也是为何第一种方法中server须要配置两条,由于oss-parent中的distributionManagement两个id不一样。而咱们自定义的就能够定义一致。咱们的settings中就能够只配置一个server了。

<distributionManagement>
    <snapshotRepository>
        <id>ossrh</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
        <id>ossrh</id>
        <name>Maven Central Staging
            Repository
        </name>
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
</distributionManagement>

复制代码
  • ps : 两种方法基本是同样的。只不过一个是maven提供。另外一个自定义而已

发布jar

  • 好了,前期的准备工做已经完成了。那么如今咱们开始配置咱们项目和maven就能够发布到中央仓库了。

  • 执行mvn clean deploy 。 我是在idea中执行的 由于gpg已经配置在settings.xml中了,因此后面不用跟gpg信息了。

  • 执行完咱们就能够在https://oss.sonatype.org中查看咱们刚发布的项目了,此时尚未发布到中央仓库;登陆此网站帐号密码就是sonatype的。左侧build promotion->staging repositories中列表最底下就是应该是咱们发布的项目

  • 咱们查看到的信息是open状态,咱们须要注意这个状态,须要open-->close-->relese 。 最后才会发布到中央仓库,而后同步到其余maven须要必定时间可能须要几天

close的时候须要看信息,close失败会在activity中提示你哪些错误的。还有些pom细节这里不能细说了,时间问题

点我查看个人pom项目(sonatype分支)

  • release成功以后再staging repositories就消失了。在左侧搜索 , 搜索到就表示成功,咱们等待就会在中央仓库搜索到咱们项目

更新项目

  • 出于使用安全的角度考虑,咱们发布过的构建是不可以修改的。即相同GAV是禁止上传发布的。GAV(maven坐标)
  • 可是咱们能够发布snapshot快照版本给团队开发,由于开发期间项目确定是不断的变化的。发布snapshots和发布releas同样就是版本号后面多snapshots
  • 并且是发布以后没有close--release这个操做,直接mvn deploy就能够了,可是snapshot在中央仓库和其余任何仓库都搜索不到。搜索不到不表明没有,在中央仓库的snapshot仓库实际上是已经有咱们的构件,只是经过页面搜索不到。咱们团队内部本身知道就好了。
  • 换句话说咱们发布快照对别人来讲是隐藏的。可是只要知道你快照的GAV就可使用。

再次发布其余项目

  • 再次发布只须要执行配置和发布那两块 。 其实就是项目的pom配置 。 以前的工单啥的不须要了。同一个groupid 只须要一个工单, 并且之后都不用关心了。

  • 中央仓库地址

  • mvn地址

相关文章
相关标签/搜索