title: Gradle signArchives unable to read Secret Key
body: <p>I am trying to publish my Java Library to Maven Central. A part of this involves using the <code>signing</code> gradle plugin to sign the artifacts. I need to sign it without using the keyring file <a href="https://docs.gradle.org/current/userguide/signing_plugin.html#sec:in-memory-keys" rel="noreferrer">as document here</a> as I cant provide my CI secure access to the key ring file.</p>
  
  <p>However when I do this my build fails with:</p>
  
  <pre><code>FAILURE: Build failed with an exception.
  
  * What went wrong:
  Could not evaluate onlyIf predicate for task ':signArchives'.
  &gt; Could not read PGP secret key
  </code></pre>
  
  <p>What am I doing wrong? I presume it is related to my <code>GPG_SIGNING_KEY</code>. 
  I used the full private key from the response of <code>gpg --list-secret-keys --keyid-format LONG</code>. Is this not correct?</p>
  
  <hr>
  
  <p>My <code>build.gradle</code></p>
  
  <pre><code>apply plugin: 'java'
  apply plugin: 'signing'
  apply plugin: 'maven'
  apply from: 'publish.gradle'
  
  sourceCompatibility = 1.8
  
  repositories {
      mavenCentral()
  }
  
  dependencies {
      compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
      testCompile 'junit:junit:4.11'
  }
  
  task Wrapper(type: Wrapper) {
      gradleVersion = '5.6.2'
  }
  </code></pre>
  
  <p>My <code>publish.gradle</code></p>
  
  <pre><code>apply plugin: 'maven'
  apply plugin: 'signing'
  
  def isReleaseBuild() {
      return !VERSION.contains("SNAPSHOT")
  }
  
  def getReleaseRepositoryUrl() {
      return 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
  }
  
  def getSnapshotRepositoryUrl() {
      return 'https://oss.sonatype.org/content/repositories/snapshots/'
  }
  
  afterEvaluate { project -&gt;
      uploadArchives {
          repositories {
              mavenDeployer {
                  beforeDeployment { MavenDeployment deployment -&gt; signing.signPom(deployment) }
  
                  repository(url: getReleaseRepositoryUrl()) {
                      def ossrhUsername = OSSRH_USERNAME
                      def ossrhPassword = OSSRH_PASSWORD
  
                      authentication(userName: ossrhUsername, password: ossrhPassword)
                  }
  
                  snapshotRepository(url: getSnapshotRepositoryUrl()) {
                      def ossrhUsername = OSSRH_USERNAME
                      def ossrhPassword = OSSRH_PASSWORD
  
                      authentication(userName: ossrhUsername, password: ossrhPassword)
                  }
  
                  pom.groupId = GROUP_ID
                  pom.artifactId = ARTIFACT_ID
                  pom.version = VERSION
  
                  pom.project {
                      name ARTIFACT_ID
                      packaging PROJECT_PACKAGING
                      description PROJECT_DESCRIPTION
                      url PROJECT_URL
  
                      scm {
                          url SCM_URL
                          connection SCM_CONNECTION
                      }
  
                      licenses {
                          license {
                              name LICENSE_NAME
                              url LICENSE_URL
                          }
                      }
  
                      organization {
                          name = ORGANIZATION_NAME
                          url = ORGANIZATION_URL
                      }
  
                      developers {
                          developer {
                              id DEVELOPER_ID
                              name DEVELOPER_NAME
                              email DEVELOPER_EMAIL
                          }
                      }
                  }
              }
          }
  
          signing {
              required { isReleaseBuild() &amp;&amp; gradle.taskGraph.hasTask("uploadArchives") }
  
              def signingKey = GPG_SIGNING_KEY
              def signingPassword = GPG_SIGNING_PASSWORD
  
              useInMemoryPgpKeys(signingKey, signingPassword)
  
              sign configurations.archives
          }
  
          task javadocJar(type: Jar) {
              classifier = 'javadoc'
              from javadoc
          }
  
          task sourcesJar(type: Jar) {
              classifier = 'sources'
              from sourceSets.main.allSource
          }
  
          artifacts {
              archives javadocJar, sourcesJar
          }
      }
  }
  </code></pre>
  
  <p>And with <code>gradle.properties</code></p>
  
  <pre><code>RELEASE_REPOSITORY_URL='https://oss.sonatype.org/service/local/staging/deploy/maven2/'
  SNAPSHOT_REPOSITORY_URL='https://oss.sonatype.org/content/repositories/snapshots/'
  GPG_SIGNING_KEY=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  GPG_SIGNING_PASSWORD=the password used to encrypt the key
  OSSRH_USERNAME=my ossrh username
  OSSRH_PASSWORD=my ossrh password
  
  VERSION=1.0.0
  GROUP_ID=com.example
  ARTIFACT_ID=project-name
  
  PROJECT_PACKAGING=...
  PROJECT_DESCRIPTION=...
  PROJECT_URL=...
  
  SCM_URL=...
  SCM_CONNECTION=...
  
  LICENSE_NAME=Apache License, Version 2.0
  LICENSE_URL=...
  
  ORGANIZATION_NAME=...
  ORGANIZATION_URL=...
  
  DEVELOPER_ID=...
  DEVELOPER_NAME=...
  DEVELOPER_EMAIL=...
  </code></pre>