无法获得 Gradle 签名插件来处理子项目
Unable to get Gradle signing plugin to work with subprojects
对于单个项目,效果很好。但是对于子项目,它要么签名但不发布,要么发布但不签名。
Gradle org 似乎没有任何官方文档显示签名子项目的示例,而且他们自己似乎也没有使用签名插件(这很遗憾,因为 Gradle源代码有100多个子项目,这将是一个很好的例子。
问题的要点是,尝试在所有项目或子项目中添加签名任务会导致 Cannot add task 'signArchives' as a task with that name already exists.
,但任何通过其他方式(例如,将其移动到包含文件)进行签名的尝试,并从每个项目对该文件调用 apply-from)删除 sign/publish 任务。
其他plugins/tasks,例如jacoco,在所有项目或子项目中应用时工作正常。这似乎特定于签名插件。它甚至可能是签名插件中的一个错误(它的名称空间不应该应用于它所应用的项目吗?)。我会接受一个可行的解决方法。
谷歌搜索答案只找到了一个遇到过这个问题的人,这就是我得到包含文件解决方案的地方,只是它删除了发布任务。
我尝试过的事情在 github、gradle 问题 13419 中有详细记录。到目前为止还没有任何回应。
下面正在工作 build.xml。
allprojects {
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'signing'
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
signing {
sign configurations.archives
}
build.dependsOn signArchives
}
group 'com.tssp'
version '1.0-SNAPSHOT'
dependencies {
implementation(project(':sub1'))
implementation(project(':sub2'))
}
settings.gradle
rootProject.name = 'tSignSubPrj'
include 'sub1'
include 'sub2'
运行 显示子项目的 signArchives 的日志
14:30:39: Executing task 'build --dry-run'...
:sub1:compileJava SKIPPED
:sub1:processResources SKIPPED
:sub1:classes SKIPPED
:sub1:jar SKIPPED
:sub2:compileJava SKIPPED
:sub2:processResources SKIPPED
:sub2:classes SKIPPED
:sub2:jar SKIPPED
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:jar SKIPPED
:signArchives SKIPPED
:assemble SKIPPED
:compileTestJava SKIPPED
:processTestResources SKIPPED
:testClasses SKIPPED
:test SKIPPED
:check SKIPPED
:build SKIPPED
:sub1:signArchives SKIPPED
:sub1:assemble SKIPPED
:sub1:compileTestJava SKIPPED
:sub1:processTestResources SKIPPED
:sub1:testClasses SKIPPED
:sub1:test SKIPPED
:sub1:check SKIPPED
:sub1:build SKIPPED
:sub2:signArchives SKIPPED
:sub2:assemble SKIPPED
:sub2:compileTestJava SKIPPED
:sub2:processTestResources SKIPPED
:sub2:testClasses SKIPPED
:sub2:test SKIPPED
:sub2:check SKIPPED
:sub2:build SKIPPED
BUILD SUCCESSFUL in 59ms
14:30:39: Task execution finished 'build --dry-run'.
这是最疯狂的事情。受访者说它奏效了,但在我们的项目中肯定没有奏效,所以我着手将我们的项目归结为一个示例,在尝试这样做时,问题没有再次出现。不知道为什么它以前不起作用,但无论如何,现在它起作用了。
对于单个项目,效果很好。但是对于子项目,它要么签名但不发布,要么发布但不签名。
Gradle org 似乎没有任何官方文档显示签名子项目的示例,而且他们自己似乎也没有使用签名插件(这很遗憾,因为 Gradle源代码有100多个子项目,这将是一个很好的例子。
问题的要点是,尝试在所有项目或子项目中添加签名任务会导致 Cannot add task 'signArchives' as a task with that name already exists.
,但任何通过其他方式(例如,将其移动到包含文件)进行签名的尝试,并从每个项目对该文件调用 apply-from)删除 sign/publish 任务。
其他plugins/tasks,例如jacoco,在所有项目或子项目中应用时工作正常。这似乎特定于签名插件。它甚至可能是签名插件中的一个错误(它的名称空间不应该应用于它所应用的项目吗?)。我会接受一个可行的解决方法。
谷歌搜索答案只找到了一个遇到过这个问题的人,这就是我得到包含文件解决方案的地方,只是它删除了发布任务。
我尝试过的事情在 github、gradle 问题 13419 中有详细记录。到目前为止还没有任何回应。
下面正在工作 build.xml。
allprojects {
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'signing'
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
signing {
sign configurations.archives
}
build.dependsOn signArchives
}
group 'com.tssp'
version '1.0-SNAPSHOT'
dependencies {
implementation(project(':sub1'))
implementation(project(':sub2'))
}
settings.gradle
rootProject.name = 'tSignSubPrj'
include 'sub1'
include 'sub2'
运行 显示子项目的 signArchives 的日志
14:30:39: Executing task 'build --dry-run'...
:sub1:compileJava SKIPPED
:sub1:processResources SKIPPED
:sub1:classes SKIPPED
:sub1:jar SKIPPED
:sub2:compileJava SKIPPED
:sub2:processResources SKIPPED
:sub2:classes SKIPPED
:sub2:jar SKIPPED
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:jar SKIPPED
:signArchives SKIPPED
:assemble SKIPPED
:compileTestJava SKIPPED
:processTestResources SKIPPED
:testClasses SKIPPED
:test SKIPPED
:check SKIPPED
:build SKIPPED
:sub1:signArchives SKIPPED
:sub1:assemble SKIPPED
:sub1:compileTestJava SKIPPED
:sub1:processTestResources SKIPPED
:sub1:testClasses SKIPPED
:sub1:test SKIPPED
:sub1:check SKIPPED
:sub1:build SKIPPED
:sub2:signArchives SKIPPED
:sub2:assemble SKIPPED
:sub2:compileTestJava SKIPPED
:sub2:processTestResources SKIPPED
:sub2:testClasses SKIPPED
:sub2:test SKIPPED
:sub2:check SKIPPED
:sub2:build SKIPPED
BUILD SUCCESSFUL in 59ms
14:30:39: Task execution finished 'build --dry-run'.
这是最疯狂的事情。受访者说它奏效了,但在我们的项目中肯定没有奏效,所以我着手将我们的项目归结为一个示例,在尝试这样做时,问题没有再次出现。不知道为什么它以前不起作用,但无论如何,现在它起作用了。