任务“:signMavenJavaPublication”执行失败。 > java.lang.NullPointerException(无错误信息)
Execution failed for task ':signMavenJavaPublication'. > java.lang.NullPointerException (no error message)
我正在尝试使用 Gradle 签名插件对我的 Java 工件进行签名。在修复了 "no configured signatory" 的错误之后,我 运行 陷入了另一个问题。任务 signMavenJavaPublication
失败并显示 NullPointerException
,我不确定原因。我已经删除了项目文件夹中的 .gradle
文件夹,清理并反复重建项目,但没有成功。
这是 build.gradle
文件:
buildscript {
repositories {
jcenter()
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
}
plugins {
id 'java'
id 'signing'
}
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'maven-publish'
apply plugin: 'signing'
group = 'com.example'
version = '1.1.0'
description = "example"
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version:'2.9.6'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version:'2.9.6'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version:'2.9.6'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version:'4.5.5'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version:'4.4.9'
compile group: 'commons-io', name: 'commons-io', version:'2.6'
compile group: 'org.apache.tika', name: 'tika-core', version:'1.18'
testCompile group: 'junit', name: 'junit', version:'4.12'
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc
}
publishing {
artifacts {
archives sourcesJar
archives javadocJar
}
publications
{
mavenJava(MavenPublication) {
from components.java
artifact sourcesJar
artifact javadocJar
}
}
repositories {
maven {
url "${project.version.endsWith('-SNAPSHOT') ? 'https://oss.sonatype.org/content/repositories/snapshots' : 'https://oss.sonatype.org/service/local/staging/deploy/maven2/' }"
credentials {
username sonatypeUsername
password sonatypePassword
}
}
}
}
signing
{
sign publishing.publications.mavenJava
}
这是堆栈跟踪:
> Task :signMavenJavaPublication FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':signMavenJavaPublication'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':signMavenJavaPublication'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NullPointerException
at org.bouncycastle.openpgp.operator.bc.BcPGPKeyConverter.getPrivateKey(Unknown Source)
at org.bouncycastle.openpgp.operator.bc.BcPGPContentSignerBuilder.build(Unknown Source)
at org.bouncycastle.openpgp.PGPSignatureGenerator.init(Unknown Source)
at org.gradle.plugins.signing.signatory.pgp.PgpSignatory.createSignatureGenerator(PgpSignatory.java:108)
at org.gradle.plugins.signing.signatory.pgp.PgpSignatory.sign(PgpSignatory.java:70)
at org.gradle.plugins.signing.type.AbstractSignatureType.sign(AbstractSignatureType.java:65)
at org.gradle.plugins.signing.type.pgp.ArmoredSignatureType.sign(ArmoredSignatureType.java:41)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:49)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:46)
at org.gradle.internal.IoActions.withResource(IoActions.java:77)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:46)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:42)
at org.gradle.internal.IoActions.withResource(IoActions.java:77)
at org.gradle.plugins.signing.type.AbstractSignatureType.sign(AbstractSignatureType.java:42)
at org.gradle.plugins.signing.Signature.generate(Signature.java:422)
at org.gradle.plugins.signing.Sign.generate(Sign.java:324)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.run(ExecuteActionsTaskExecuter.java:131)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
你看到了吗:
Caused by: java.lang.NullPointerException
at org.bouncycastle.openpgp.operator.bc.BcPGPKeyConverter.getPrivateKey
getPrivateKey()
converts a private key from one type to another。如果没有 PrivKey,NPE 是可以理解的。
您是否按照The Signing Plugin中的描述定义了它?看那里:
Note that the presence of a null value for any these three properties will cause an exception.
感谢 Gerold Broser 的帮助,我找到了答案,他指出 getPrivateKey
是问题所在。事实证明,我使用的是密钥的密钥 ID,而不是如 here 所述的签名密钥。
要获取密钥 ID,我必须使用 gpg --list-keys --keyid-format short
,如 中所述。一旦 signing.keyId 设置为签名密钥的最后八个字符,NPE 错误就消失了!
我正在尝试使用 Gradle 签名插件对我的 Java 工件进行签名。在修复了 "no configured signatory" 的错误之后,我 运行 陷入了另一个问题。任务 signMavenJavaPublication
失败并显示 NullPointerException
,我不确定原因。我已经删除了项目文件夹中的 .gradle
文件夹,清理并反复重建项目,但没有成功。
这是 build.gradle
文件:
buildscript {
repositories {
jcenter()
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
}
}
plugins {
id 'java'
id 'signing'
}
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'maven-publish'
apply plugin: 'signing'
group = 'com.example'
version = '1.1.0'
description = "example"
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version:'2.9.6'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version:'2.9.6'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version:'2.9.6'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version:'4.5.5'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version:'4.4.9'
compile group: 'commons-io', name: 'commons-io', version:'2.6'
compile group: 'org.apache.tika', name: 'tika-core', version:'1.18'
testCompile group: 'junit', name: 'junit', version:'4.12'
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc
}
publishing {
artifacts {
archives sourcesJar
archives javadocJar
}
publications
{
mavenJava(MavenPublication) {
from components.java
artifact sourcesJar
artifact javadocJar
}
}
repositories {
maven {
url "${project.version.endsWith('-SNAPSHOT') ? 'https://oss.sonatype.org/content/repositories/snapshots' : 'https://oss.sonatype.org/service/local/staging/deploy/maven2/' }"
credentials {
username sonatypeUsername
password sonatypePassword
}
}
}
}
signing
{
sign publishing.publications.mavenJava
}
这是堆栈跟踪:
> Task :signMavenJavaPublication FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':signMavenJavaPublication'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':signMavenJavaPublication'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NullPointerException
at org.bouncycastle.openpgp.operator.bc.BcPGPKeyConverter.getPrivateKey(Unknown Source)
at org.bouncycastle.openpgp.operator.bc.BcPGPContentSignerBuilder.build(Unknown Source)
at org.bouncycastle.openpgp.PGPSignatureGenerator.init(Unknown Source)
at org.gradle.plugins.signing.signatory.pgp.PgpSignatory.createSignatureGenerator(PgpSignatory.java:108)
at org.gradle.plugins.signing.signatory.pgp.PgpSignatory.sign(PgpSignatory.java:70)
at org.gradle.plugins.signing.type.AbstractSignatureType.sign(AbstractSignatureType.java:65)
at org.gradle.plugins.signing.type.pgp.ArmoredSignatureType.sign(ArmoredSignatureType.java:41)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:49)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:46)
at org.gradle.internal.IoActions.withResource(IoActions.java:77)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:46)
at org.gradle.plugins.signing.type.AbstractSignatureType.execute(AbstractSignatureType.java:42)
at org.gradle.internal.IoActions.withResource(IoActions.java:77)
at org.gradle.plugins.signing.type.AbstractSignatureType.sign(AbstractSignatureType.java:42)
at org.gradle.plugins.signing.Signature.generate(Signature.java:422)
at org.gradle.plugins.signing.Sign.generate(Sign.java:324)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:801)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:768)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.run(ExecuteActionsTaskExecuter.java:131)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
你看到了吗:
Caused by: java.lang.NullPointerException
at org.bouncycastle.openpgp.operator.bc.BcPGPKeyConverter.getPrivateKey
getPrivateKey()
converts a private key from one type to another。如果没有 PrivKey,NPE 是可以理解的。
您是否按照The Signing Plugin中的描述定义了它?看那里:
Note that the presence of a null value for any these three properties will cause an exception.
感谢 Gerold Broser 的帮助,我找到了答案,他指出 getPrivateKey
是问题所在。事实证明,我使用的是密钥的密钥 ID,而不是如 here 所述的签名密钥。
要获取密钥 ID,我必须使用 gpg --list-keys --keyid-format short
,如