发布到 Maven 中心时缺少 jar 的签名 jar.asc

Posted

技术标签:

【中文标题】发布到 Maven 中心时缺少 jar 的签名 jar.asc【英文标题】:Missing Signature jar.asc for jar when post to Maven Central 【发布时间】:2020-11-13 05:18:54 【问题描述】:

这是我第一次尝试部署到 Maven Central 存储库,但我找不到有关如何执行此操作的终极指南。

无论我尝试什么,我都会得到同样的错误:

缺少签名: '/com/github/chameleontartu/amazon-mws-reports-maven/1.2.0-RC12/amazon-mws-reports-maven-1.2.0-RC12-javadoc.jar.asc' 不存在'amazon-mws -reports-maven-1.2.0-RC12-javadoc.jar'。

我的所有代码的开源项目:Github repo。

GitHub Actions 工作流.github/workflows/deploy.yml

name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Maven Central Repository
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
          server-id: os-s-rh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Create Key File
        run: echo "$GPG_PRIVATE_KEY" > private.key
        env:
          GPG_PRIVATE_KEY: $ secrets.GPG_PRIVATE_KEY 
      - name: Import GPG Key
        run: gpg --import --batch private.key
      - name: Cache
        uses: actions/cache@v1
        with:
          path: ~/.m2/repository
          key: $ runner.os -maven-$ hashFiles('**/pom.xml') 
          restore-keys: |
            $ runner.os -maven-
      - if: github.event.release
        name: Update version in pom.xml (Release only)
        run: mvn -B versions:set -DnewVersion=$ github.event.release.tag_name  -DgenerateBackupPoms=false
      - name: Run Maven
        run: mvn -B clean install
      - name: Publish package
        run: |-
          mvn -B deploy -Dgpg.passphrase="$GPG_PASSPHRASE"
        env:
          GPG_KEYNAME: $ secrets.GPG_KEYNAME 
          GPG_PASSPHRASE: $ secrets.GPG_PASSPHRASE 
          MAVEN_USERNAME: $ secrets.Os-s-rH_USERNAME 
          MAVEN_PASSWORD: $ secrets.Os-s-rH_TOKEN 


# Examples are taken from
# - https://github.com/camunda/camunda-bpm-mockito/blob/465b4f5f2f29806a1a855e7cabf918b633df1075/.github/workflows/deploy.yml
# - https://github.com/see-es-vee/see-es-vee/blob/43bec4ef0005caa9b30cf11bf10efe03bd517733/.github/workflows/mavenpublish.yml

我的 pom.xml 文件包含所有插件和依赖项:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.github.chameleontartu</groupId>
    <artifactId>amazon-mws-reports-maven</artifactId>
    <version>1.1.0</version>
    <packaging>jar</packaging>
    <name>Amazon MWS :: Reports</name>
    <description>Amazon MWS Reports API Client Library</description>
    <url>https://github.com/ChameleonTartu/amazon-mws-reports-maven</url>

    <licenses>
        <license>
            <name>The Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <developers>
        <developer>
            <id>chameleontartu</id>
            <name>Dmytro Chasovskyi</name>
            <email>lal@mail.com</email>
            <url>https://example.com</url>
            <roles>
                <role>developer</role>
            </roles>
        </developer>
        <developer>
            <id>amazon-mws</id>
            <organization>Amazon Technologies, Inc</organization>
            <organizationUrl>https://developer.amazonservices.com/gp/mws/docs.html</organizationUrl>
            <roles>
                <role>developer</role>
            </roles>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:git@github.com:ChameleonTartu/amazon-mws-reports-maven.git</connection>
        <developerConnection>scm:git:git@github.com:ChameleonTartu/amazon-mws-orders-maven.git</developerConnection>
        <url>https://github.com/ChameleonTartu/amazon-mws-reports-maven/tree/master</url>
    </scm>

    <properties>
        <gpg.keyname>$ env.GPG_KEYNAME </gpg.keyname>
        <gpg.passphrase>$ env.GPG_PASSPHRASE </gpg.passphrase>

        <!-- Unify the encoding for all modules -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <jdk.version>1.6</jdk.version>
        <compiler.fork>1.6</compiler.fork>

        <!-- Dependencies -->
        <maven-bundle-version>2.3.7</maven-bundle-version>
        <commons-codec-version>1.14</commons-codec-version>
        <commons-httpclient-version>3.1</commons-httpclient-version>
        <commons-logging-version>1.1</commons-logging-version>

        <httpcore.version>4.4.13</httpcore.version>
        <httpclient.version>4.5.12</httpclient.version>

        <mockito-version>1.9.5</mockito-version>
        <junit-version>4.13</junit-version>
        <jaxb-api.version>2.3.1</jaxb-api.version>

        <!-- Plugins -->
        <maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version>
        <maven-idea-plugin.version>2.2.1</maven-idea-plugin.version>


        <maven-bundle-plugin.version>5.1.1</maven-bundle-plugin.version>
        <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
        <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
        <build-helper-maven-plugin.version>3.2.0</build-helper-maven-plugin.version>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
        <maven-install-plugin.version>2.5.2</maven-install-plugin.version>
        <maven-scm-provider-gitexe.version>1.11.2</maven-scm-provider-gitexe.version>
        <nexus-staging-maven-plugin.version>1.6.8</nexus-staging-maven-plugin.version>
        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
        <maven-release-plugin.version>2.5.3</maven-release-plugin.version>
        <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>$commons-codec-version</version>
        </dependency>

        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>$commons-httpclient-version</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
            <version>$commons-logging-version</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>$httpclient.version</version>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>$httpcore.version</version>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>$mockito-version</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>$junit-version</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>$jaxb-api.version</version>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>install</defaultGoal>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>$maven-assembly-plugin.version</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>$build-helper-maven-plugin.version</version>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>$maven-compiler-plugin.version</version>
                    <configuration>
                        <source>$jdk.version</source>
                        <target>$jdk.version</target>
                        <maxmem>256M</maxmem>
                        <fork>$compiler.fork</fork>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <version>$maven-eclipse-plugin.version</version>
                    <configuration>
                        <downloadSources>true</downloadSources>
                        <downloadJavadocs>false</downloadJavadocs>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-idea-plugin</artifactId>
                    <version>$maven-idea-plugin.version</version>
                    <configuration>
                        <downloadSources>true</downloadSources>
                        <downloadJavadocs>false</downloadJavadocs>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>$maven-javadoc-plugin.version</version>
                    <configuration>
                        <attach>true</attach>
                        <source>$jdk.version</source>
                        <quiet>true</quiet>
                        <detectOfflineLinks>false</detectOfflineLinks>
                        <encoding>$project.build.sourceEncoding</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>$maven-install-plugin.version</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>$maven-surefire-plugin.version</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>maven-bundle-plugin</artifactId>
                    <version>$maven-bundle-plugin.version</version>
                </plugin>
                <plugin>
                    <groupId>org.sonatype.plugins</groupId>
                    <artifactId>nexus-staging-maven-plugin</artifactId>
                    <version>$nexus-staging-maven-plugin.version</version>
                    <extensions>true</extensions>
                    <configuration>
                        <serverId>os-s-rh</serverId>
                        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                        <autoReleaseAfterClose>true</autoReleaseAfterClose>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>$maven-source-plugin.version</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>$maven-release-plugin.version</version>
                <configuration>
                    <localCheckout>true</localCheckout>
                    <pushChanges>false</pushChanges>
                    <mavenExecutorId>forked-path</mavenExecutorId>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.scm</groupId>
                        <artifactId>maven-scm-provider-gitexe</artifactId>
                        <version>$maven-scm-provider-gitexe.version</version>
                    </dependency>
                </dependencies>
            </plugin>

            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>$maven-deploy-plugin.version</version>
                <executions>
                    <execution>
                        <id>default-deploy</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

    <profiles>
        <profile>
            <id>release-sign-artifacts</id>
            <activation>
                <property>
                    <name>performRelease</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                                <configuration>
                                    <!-- This is necessary for gpg to not try to use the pinentry programs -->
                                    <gpgArguments>
                                        <arg>--pinentry-mode</arg>
                                        <arg>loopback</arg>
                                    </gpgArguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>release</id>
            <activation>
                <jdk>[1.6,)</jdk>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-source-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-javadoc</id>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <distributionManagement>
        <snapshotRepository>
            <id>os-s-rh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
            <id>os-s-rh</id>
            <name>Central Repository Os-s-rH</name>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>
</project>

当我在本地执行相同操作时,我会得到 .jar.asc 文件。

我做错了什么?

【问题讨论】:

【参考方案1】:

发现maven-gpg-plugin的激活配置文件错误

我改成:

<activation>
    <property>
        <name>gpg.passphrase</name>
    </property>
</activation>

它还解决了另一个问题,即不应将工件登录到持续集成中。

【讨论】:

以上是关于发布到 Maven 中心时缺少 jar 的签名 jar.asc的主要内容,如果未能解决你的问题,请参考以下文章

Maven:POM.xml 中缺少工件 com.sun:tools:jar:1.6.0 编译时异常 [重复]

使用 Maven 在可执行 JAR 中包含签名库

使用 Spring Boot Maven 插件时,jar 文件中缺少 Spring Boot 应用程序中的资源

由于缺少 tools.jar,Maven AspectJ 插件无法使用 Java 9 构建

由于缺少JAR签名,Android Studio不会让我上传APK

请问,maven项目发布为jar到私服,其他项目如何引用内部依赖?