从内部联系发布到 Maven Central

Publish from internal nexus to maven central

我有一个内部联系,其中包含我们构建的所有工件。 一旦测试了工件,我想将正常的工件部署到 Maven Central 而无需重建它

我知道我可以使用 mvn deploy:deploy-file 来做到这一点,但它看起来很复杂。 有简单的方法吗?

注意:由于历史原因,我们不使用SNAPSHOT版本。所有版本都是artifact-name-X.Y.Z.jar的样式,X.Y.Z是版本号。我们有一个内部工具,可以查询其完整性。

让我假设你不仅有 x.y.z 版本的二进制文件,还有这个版本的 scm 标签。

如果是这样,您可以尝试以下CI工作:

<scm> checkout <YOUR TAG>
<scm> clean -d -x -f

mvn maven-dependency-plugin:get -Pcustom-deployment -DexecutionId=resolve-sane-binaries
mvn maven-deploy-plugin:deploy -Pcustom-deployment -DexecutionId=deploy-sane-binaries

在您的 pom.xml 中有个人资料:

<profiles>
    <profile>
        <id>custom-deployment</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.1.2</version>
                    <executions>
                        <execution>
                            <id>resolve-sane-binaries</id>
                            <goals>
                                <goal>get</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>${project.groupId}</groupId>
                                        <artifactId>${project.artifactId}</artifactId>
                                        <version>${project.version}</version>
                                        <type>${project.packaging}</type>
                                        <outputDirectory>${project.build.directory}</outputDirectory>
                                        <destFileName>${project.build.finalName}</destFileName>
                                    </artifactItem>
                                    ...
                                </artifactItems>
                                ...
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                    <executions>
                        <execution>
                            <id>deploy-sane-binaries</id>
                            <goals>
                                <goal>deploy-file</goal>
                            </goals>
                            <configuration>
                                ...
                            </configuration>
                        </execution>
                    <executions>
                <plugin>
            </plugins>

这只是一个想法,并不是我真正测试过的代码。但希望它能有所帮助。

我已经结束了使用类似于他们在这里的方法: https://central.sonatype.org/pages/manual-staging-bundle-creation-and-deployment.html

所以,如果我有以下文件:

ossrh-test-1.2.pom
ossrh-test-1.2.jar
ossrh-test-1.2-javadoc.jar
ossrh-test-1.2-sources.jar

我已经为 JAR 调用了这个命令:

mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=ossrh -DpomFile=ossrh-test-1.2.pom -Dfile=ossrh-test-1.2.jar

以及源代码和 JavaDocs 的以下命令:

mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=ossrh -DpomFile=ossrh-test-1.2.pom -Dfile=ossrh-test-1.2-sources.jar -Dclassifier=sources
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=ossrh -DpomFile=ossrh-test-1.2.pom -Dfile=ossrh-test-1.2-javadoc.jar -Dclassifier=javadoc

最后但同样重要的是,因为我不得不创建假源和 javadoc jar,所以我只是拿了一个 jar,解压它,在里面放一个自述文件而不是旧内容,更新清单并压缩它再次。然后我将其上传为我的假 sources/javadoc 罐子。