Gradle:每个子项目的公共Zip任务

Gradle:每个子项目的公共Zip任务,gradle,build.gradle,multi-project,Gradle,Build.gradle,Multi Project,我有一个多项目的gradle构建,根项目的所有子项目都有一个公共的zip任务。根据子项目的设置,他们应该压缩一些源代码 首先,我在parentbuild.gradle中配置了它: subprojects { subproject -> apply plugin: 'java' ... task submission(type: Zip) { destinationDir = subproject.buildDir archiveN

我有一个多项目的gradle构建,根项目的所有子项目都有一个公共的zip任务。根据子项目的设置,他们应该压缩一些源代码

首先,我在parent
build.gradle中配置了它:

subprojects { subproject ->
    apply plugin: 'java'
    ...

    task submission(type: Zip) { 
        destinationDir = subproject.buildDir
        archiveName = subproject.name

        from subproject.ext.submissionFiles
    }
}
但这不适用于
无法在额外属性扩展上获取属性“submissionFiles”,因为它不存在
。因此,我将任务移动到每个子项目的
build.gradle
,这打破了枯燥的原则


我认为问题在于配置阶段发生在子项目配置之前。如何“延迟”配置此任务,以便只在子项目中配置
ext.submissionFiles

我想您是说
submissionFiles
是在子项目的build.gradle中设置的

有几种方法可以做到这一点

备选案文1。您可以通过将
subproject.ext.submissionFiles
包装在以下文件中来推迟评估:


备选案文2。我认为如果您不使用中间变量(submissionFiles)并直接在子项中配置提交任务,那么会更好:

// In root
task submission(type: Zip) { 
    destinationDir = subproject.buildDir
    archiveName = subproject.name
}

// In child
submission {
    from("path/to/files")
}
使用这样的中间变量来移动配置会使构建更难理解任务之间的连接



备选案文3。在某些情况下,使用它是有意义的,但我通常不推荐它。

我想你是说
submissionFiles
是在子项目的build.gradle中设置的

有几种方法可以做到这一点

备选案文1。您可以通过将
subproject.ext.submissionFiles
包装在以下文件中来推迟评估:


备选案文2。我认为如果您不使用中间变量(submissionFiles)并直接在子项中配置提交任务,那么会更好:

// In root
task submission(type: Zip) { 
    destinationDir = subproject.buildDir
    archiveName = subproject.name
}

// In child
submission {
    from("path/to/files")
}
使用这样的中间变量来移动配置会使构建更难理解任务之间的连接



备选案文3。在某些情况下,使用它是有意义的,但我通常不推荐它。

我想你是说
submissionFiles
是在子项目的build.gradle中设置的

有几种方法可以做到这一点

备选案文1。您可以通过将
subproject.ext.submissionFiles
包装在以下文件中来推迟评估:


备选案文2。我认为如果您不使用中间变量(submissionFiles)并直接在子项中配置提交任务,那么会更好:

// In root
task submission(type: Zip) { 
    destinationDir = subproject.buildDir
    archiveName = subproject.name
}

// In child
submission {
    from("path/to/files")
}
使用这样的中间变量来移动配置会使构建更难理解任务之间的连接



备选案文3。在某些情况下,使用它是有意义的,但我通常不推荐它。

我想你是说
submissionFiles
是在子项目的build.gradle中设置的

有几种方法可以做到这一点

备选案文1。您可以通过将
subproject.ext.submissionFiles
包装在以下文件中来推迟评估:


备选案文2。我认为如果您不使用中间变量(submissionFiles)并直接在子项中配置提交任务,那么会更好:

// In root
task submission(type: Zip) { 
    destinationDir = subproject.buildDir
    archiveName = subproject.name
}

// In child
submission {
    from("path/to/files")
}
使用这样的中间变量来移动配置会使构建更难理解任务之间的连接



备选案文3。在某些情况下,使用它是有意义的,但我通常不建议使用。

是由另一个任务创建的“submissionFiles”吗?是由另一个任务创建的“submissionFiles”吗?是由另一个任务创建的“submissionFiles”吗?我喜欢第二个变体!问题是,在第一个示例中({subproject.ext.submissionFiles})中的
起作用,但我无法使
destinationDir=subproject.buildDir
起作用。错误消息是:``无法获取项目的未知属性'buildDir':子项目名称'。当然,必须在根项目中写入这些变量,以便在配置周期中放入变量?我喜欢第二个变量!问题是,在第一个示例中({subproject.ext.submissionFiles})中的
起作用,但我无法使
destinationDir=subproject.buildDir
起作用。错误消息是:``无法获取项目的未知属性'buildDir':子项目名称'。当然,必须在根项目中写入这些变量,以便在配置周期中放入变量?我喜欢第二个变量!问题是,在第一个示例中({subproject.ext.submissionFiles})中的
起作用,但我无法使
destinationDir=subproject.buildDir
起作用。错误消息是:``无法获取项目的未知属性'buildDir':子项目名称'。当然,必须在根项目中写入这些变量,以便在配置周期中放入变量?我喜欢第二个变量!问题是,在第一个示例中({subproject.ext.submissionFiles})中的
起作用,但我无法使
destinationDir=subproject.buildDir
起作用。错误消息是:``无法获取项目的未知属性'buildDir':子项目名称'。当然,必须在根项目中写入这些变量,以便在配置周期中放入变量?