- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于 Gradle(3.3 版)如何解决多项目设置(使用 java 子项目)中的任务依赖性的小问题。我对 gradle 很陌生,所以这可能是个愚蠢的问题......
我想实现一个任务在编译前执行,一个在编译后执行。
使用 defaultTasks 它按预期工作。但是当使用 dependsOn 定义任务时,它不会。
我的根 build.gradle
文件如下所示:
defaultTasks 'a', 'classes', 'b'
task a {
doLast {
println 'before compile'
}
}
task b {
doLast {
println 'after compile'
}
}
task doIt(dependsOn: [a, 'classes', b]) {
doLast {
println('done!')
}
}
allprojects {
group = 'foo'
repositories {
mavenCentral()
maven {
url 'https://maven.atlassian.com/3rdparty/'
}
}
}
subprojects {
ext {
springVersion = '4.3.5.RELEASE'
}
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'lib', include: '*.jar')
testCompile group: 'junit', name: 'junit', version: '4.12'
}
}
当我执行 gradle
时,默认任务按预期执行:我得到“编译前”,然后编译所有子项目,然后“编译后”。
当我执行 gradle doIt
时,我收到以下错误消息
Task with path 'classes' not found in root project 'teambits-core'.
知道为什么会这样吗?
最佳答案
按原样使用您的 build.gradle,仅运行“gradle”会在我的 3.3 安装中出现相同的错误。
您在这里遇到了 2 个问题。
<强>1。多项目子项目与所有项目
第一个问题是 defaultTasks 是在主 build.gradle 中定义的,但您的 java 插件仅包含在子项目中。
在多项目构建中,“master”项目不是子项目部分的一部分(只有 allprojects 影响主项目),但您的“defaultTasks”是在顶层定义的,因此运行“gradle”将调用主项目中的 defaultTasks 并在类任务上失败,因为它没有加载 java 插件。
要解决此问题,请将“应用插件”行移动到所有项目(但仅用于此说明,通常您不希望在 master 中加载 java 插件,因为它通常与设置子项目有关)。
<强>2。 defaultTasks 与 dependsOn
第二个问题是(假设您移动了 apply 插件)那么您将了解 defaultTasks 和 dependsOn 之间的真正区别。
defaultTasks 按照您指定的顺序运行任务:
$ gradle
:a
before compile
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:b
after compile
BUILD SUCCESSFUL
Total time: 0.765 secs
但是以列表顺序运行 doIt 将导致 gradle 按字母顺序运行它们(因为它们之间没有依赖关系,在这种情况下它将按字母顺序运行它们)。
$ gradle doit
:a
before compile
:b
after compile
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:doIt
done!
BUILD SUCCESSFUL
Total time: 0.733 secs
使用 mustRunAfter 修复依赖顺序
在这种情况下,您可以通过向 doIt 添加以下内容来修复它:
task doIt(dependsOn: [a, 'classes', b]) {
b.mustRunAfter(':classes')
doLast {
println('done!')
}
}
这将强制 b 任务稍后完成。
关于Gradle dependson 与多项目中的 defaultTasks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41769080/
我正在使用explode transform宏按以下方式进行。 ServiceMap: Private: Prefix: Private Public: P
可能重复:How to write dependsOn in Custom plugin 我有一个带有两个任务A和B的自定义Gradle插件。我在插件中声明了两个任务,如下所示: project.ta
微软 documents隐式和显式依赖的目的。其中显式依赖项使用“dependsOn”。但有人提到这种方法的用例很少。 可以对以下内容进行一些澄清: 来自 MS 的示例 resource dnsZon
我有一个分层的 gradle 3.1 项目,如下所示: root - build.gradle - settings.gradle - server (Java + WAR p
微软 documents隐式和显式依赖的目的。其中显式依赖项使用“dependsOn”。但有人提到这种方法的用例很少。 可以对以下内容进行一些澄清: 来自 MS 的示例 resource dnsZon
我有两个任务Task-A和Task-B 这是我的任务-A task Task-A () { doLast { def fileName = _.property('fileName')
Spring(可能还有其他 DI 容器,但我使用的是 Spring)识别 @DependsOn 注释。您使用它来标识必须在该 bean 之前启动的任何其他 beans,例如 @Component @D
测试 gradle 作为 maven 的替代品,我们有一个 build.gradle 文件,其中包含以下插件 buildscript { repositories { jcen
关于 Gradle(3.3 版)如何解决多项目设置(使用 java 子项目)中的任务依赖性的小问题。我对 gradle 很陌生,所以这可能是个愚蠢的问题...... 我想实现一个任务在编译前执行,一个
我在 azure 数据工厂管道事件中遇到以下错误 我正在使用以下代码: ... "dependsOn": [ { "activity": "MyFirstAct
我有 3 个 gradle 任务:A、B、C。B依赖于A。C 依赖于 A。 如果在 A 中有一个 if 检查,我希望 B 运行时为真,C 运行时为假。我该怎么做? 为了清楚起见,真正的任务是: war
我有一个抽象类A和一堆子类,它们是使用@Service注释定义的Spring bean(A本身不是已注释)。我还有一些单独的 B 类型的 bean。 我需要实现的是让所有这些A-bean在 bean
我正在尝试在应用程序启动时更新数据库中的某些内容。为此,我创建了一个 A 类来执行此操作。 @Singleton @Startup @DependsOn({ "B", "C" }) public cl
首先:这不是这个的副本 Error:Could not find property 'assembleDebug' on project ':app' 问题: 自从更新到 Android Studio
本文整理了Java中com.artemis.WorldConfigurationBuilder.dependsOn()方法的一些代码示例,展示了WorldConfigurationBuilder.de
我在 sbt 中创建了一个多项目构建。这是 build.sbt 在主目录中: lazy val root = project in file(".") aggregate(data, reco, re
我需要为 ECS 服务设置此项。 ECSService: Type: AWS::ECS::Service DependsOn: ListenerSSL 问题是 ListenerSS
我正在尝试将installDebug.dependsOn(uninstallDebug)添加到我的生成文件中,例如this。 将其添加到主构建文件失败以及将其添加到应用构建文件(在android {}
我有一个 3.2.14.RELEASE spring 应用程序,并且正在使用 java 配置来连接和注入(inject) bean。 就我而言,我需要 设置 SSH 隧道 创建一个数据源,以便它使用相
两个问题: 指定 1 个任务由多个其他任务组成的 gradle 方法是什么? 似乎 gradle 的 taskName.execute() 方法不尊重 taskName 的 dependentOn 关
我是一名优秀的程序员,十分优秀!