Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动部署到sonatype';s oss maven存储库_Java_Maven_Maven Plugin_Nexus_Sonatype - Fatal编程技术网

Java 自动部署到sonatype';s oss maven存储库

Java 自动部署到sonatype';s oss maven存储库,java,maven,maven-plugin,nexus,sonatype,Java,Maven,Maven Plugin,Nexus,Sonatype,我有几个github java项目。其中一个我已经手动部署到sonatype的存储库中,以便在maven central中发布 从某种意义上说,这是一个有点痛苦的过程,因为它似乎涉及到太多无法跨越的障碍和大量的手工工作,我想将其自动化。 所以我实际上停止了这样做,因为这是太多的工作。有大量的文档表明这是可能的,也有相当多的文档表明它涉及到使用nexus staging maven插件做一些事情。 不幸的是,所有这些文档(以典型的maven风格)都忽略了一些基本细节,这些细节将使我能够以一种简单的

我有几个github java项目。其中一个我已经手动部署到sonatype的存储库中,以便在maven central中发布

从某种意义上说,这是一个有点痛苦的过程,因为它似乎涉及到太多无法跨越的障碍和大量的手工工作,我想将其自动化。 所以我实际上停止了这样做,因为这是太多的工作。有大量的文档表明这是可能的,也有相当多的文档表明它涉及到使用nexus staging maven插件做一些事情。 不幸的是,所有这些文档(以典型的maven风格)都忽略了一些基本细节,这些细节将使我能够以一种简单的方式找出允许我自动将发布版本发布到sonatype存储库(即,无需我手动批准事情)所需的最少步骤

那么,在我的pom(假设是一个bog标准的简单java项目)中需要出现什么样的简介,包括sonatype存储库的URL,我找到的所有文档似乎都坚持localhost:8081就是它,以及让它发布所需的maven咒语(最好通过mvn发布插件),让它对工件进行签名,并让它将生成的工件部署到sonatype,获得批准,并准备好同步到maven central,等等

因此,我在寻找一种maven替代ruby世界中的“gem push”,它可以方便地用一行程序完成工作。这是一个简单的例子,给定一个我批准的jar文件,我如何让它以最少的麻烦结束在maven central中

我非常感谢一些pom文件的例子,我可以复制和修改这些文件

编辑: 这是我的工作pom文件:

如果没有正确的id,它无法识别,并且仍然失败:

所以95%是自动化的,但我仍然需要每次计算出stagingRepositoryId

编辑:
mvn release:perform
实际上告诉您暂存存储库的id。
我想您可以编写一个脚本,从输出中提取此id,然后将其传递到下一步。如果有人知道一些mvn巫术来进行mvn发布:执行也进行登台发布,那将不胜感激。

为了Maven项目的方便,Sonatype提供了一个父POM,您可以使用所有基本配置将其添加到您的项目中:

重要的是:

  <parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
  </parent>
之后,您应该能够使用以下两个步骤:

$ mvn release:prepare

$ mvn release:perform
不幸的是,我不知道有什么方法可以自动化流程中的手动审批部分(在oss.sonatype.org中)。但这应该已经为你节省了一些时间

如上所示,文档可能有点复杂,但非常完整,为您提供了各种场景所需的所有信息

编辑:

事实上,我认为我错了,自动化审批流程是其中的一部分。有趣

对于这一部分,你是对的,细节相当有限。不过,我希望配置的第一部分已经对您有所帮助。我需要进一步研究这个舞台设计(或者其他人可能已经做了!)

再次编辑\u:

我需要实际尝试一下,但听起来像是:

        <plugins>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6</version>
                <extensions>true</extensions>
                <configuration>
                    <!-- The Base URL of Nexus instance where we want to stage -->
                    <nexusUrl>https://oss.sonatype.org/service/local/staging/deploy/maven2/</nexusUrl>
                    <serverId>sonatype-nexus-staging</serverId>
                </configuration>
            </plugin>
        </plugins>
有待检验

所以95%是自动化的,但我仍然需要每次计算stagingRepositoryId

您可以使用mvn nexus staging:rc list

具体地说,通过执行
mvn release:rc list
并使用
grep
或其他任何方法,通过某种形式的组ID或您知道的
stagingRepositoryId
的其他子字符串来过滤输出,您可以确定完整的
stagingRepositoryId

例如,我的项目的组ID是
nu。validator
和我的
stagingRepositoryId
值都是
nuvalidator NNNN
格式的,其中
nnnnnn
部分是一个数字,在我的第一次发布时从
1000
开始,每次发布时系统递增1;所以
numvalidator-1000
numvalidator-1001
,等等

因此,在我用于构建的python脚本中,我只需执行以下操作:

output=子流程。检查输出(“mvn nexus暂存:rc列表-DnexusUrl=https://oss.sonatype.org/ -DserverId=ossrh”)
对于输出中的行。拆分('\n'):
如果行中有“nuvalidator”:
stagingRepositoryId=“nuvalidator-”+行[8:23]
...
这是因为
mvn nexus staging:rc list
输出中返回的相关行的格式如下:

...
[INFO] central_bundles-3514 OPEN     Implicitly created (auto staging).
[INFO] central_bundles-3515 OPEN     Implicitly created (auto staging).
[INFO] central_bundles-3521 OPEN     Implicitly created (auto staging).
[INFO] nuvalidator-1008     OPEN     Implicitly created (auto staging).
...

哇!那么它有用吗?如果你能告诉我们最后一部分是否有效,我会非常高兴:)这样我们就可以对Sonatype的人抱怨,看看他们/某人是否可以将staging maven插件添加到官方的父系统中。我当前的staging设置有一些问题;等待他们方面的批准。我会在它工作(或不工作)后再报告。计划在这里添加所有信息,因为我预计许多人可能正在寻找一种不含糊的方式来实现这一点。
  <servers>
    <server>
      <id>sonatype-nexus-snapshots</id>
      <username>your-jira-id</username>
      <password>your-jira-pwd</password>
    </server>
    <server>
      <id>sonatype-nexus-staging</id>
      <username>your-jira-id</username>
      <password>your-jira-pwd</password>
    </server>
  </servers>
$ mvn release:prepare

$ mvn release:perform
        <plugins>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6</version>
                <extensions>true</extensions>
                <configuration>
                    <!-- The Base URL of Nexus instance where we want to stage -->
                    <nexusUrl>https://oss.sonatype.org/service/local/staging/deploy/maven2/</nexusUrl>
                    <serverId>sonatype-nexus-staging</serverId>
                </configuration>
            </plugin>
        </plugins>
$ mvn nexus-staging:release -Ddescription="Yippie!"
...
[INFO] central_bundles-3514 OPEN     Implicitly created (auto staging).
[INFO] central_bundles-3515 OPEN     Implicitly created (auto staging).
[INFO] central_bundles-3521 OPEN     Implicitly created (auto staging).
[INFO] nuvalidator-1008     OPEN     Implicitly created (auto staging).
...