从内部联系发布到 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 罐子。
我有一个内部联系,其中包含我们构建的所有工件。 一旦测试了工件,我想将正常的工件部署到 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 罐子。