- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在学习 Gradle,所以这可能是一个简单的问题,但我似乎无法理解。
我需要在我的 gradle 构建中创建一个删除一组中间文件的任务。所以在谷歌搜索之后,我尝试了以下方法:
task deleteTest (type: Delete) {
doLast {
delete fileTree ('src/main/gen') {
include '**/*'
}
}
}
这没有效果,因为当我运行任务时,“src/main/gen”目录中的所有文件仍然存在。通过阅读各种网站,这似乎是正确的方法,但它就是行不通。
只是为了笑,我试过:
task deleteTest (type: Delete) {
delete fileTree ('src/main/gen') {
include '**/*'
}
}
这似乎有效,所有文件都从目录中删除(尽管它留下了空的子目录,我也不明白)。但据我所知,这不是正确的方法,因为它是在配置期间执行的,而不是在执行期间执行的。
有人可以给我解释一下吗?显然,对于一般的 Gradle,尤其是这个问题,我只是不太了解。
最佳答案
简短答案:
如果你只想删除文件夹 src/main/gen
和里面的所有东西,使用这样的东西:
task deleteTest(type: Delete) {
delete 'src/main/gen'
}
你的第二个例子也很好。它保留目录,因为使用了 fileTree
,它只收集文件。
长答案:
您的第一个示例混合了两种在 Gradle 中删除文件的方法。第一个是使用 Delete
类型的任务,第二个是调用 Project
类型的方法 delete
。但是它们有何不同,为什么它们在您的示例中混合在一起?
Gradle 基于其任务系统,允许定义和配置仅在必要时运行的任务。构建是否需要任务将根据任务依赖性 (dependsOn
) 确定。这就是 Gradle 区分配置阶段和执行阶段的原因。在配置阶段,除了实际的任务操作(在构建脚本中不可见)和包装在 doFirst
/doLast
闭包中的代码外,整个构建脚本都会被执行。在执行阶段,每个必需的任务都由 Gradle 运行。这涉及执行任务的 doFirst
闭包,然后是实际的任务操作,最后是任务的 doLast
闭包。现在,对于像上面那样的 Delete
任务,这意味着配置闭包 delete 'src/main/gen'
中的代码在配置阶段执行,但实际稍后在执行阶段删除文件(任务操作)。
当需要直接或一直删除文件时(例如在插件或其他场景中),这种方法就会出现问题。创建任务、设置依赖项等都太复杂了。 Project
类型的方法 delete
来拯救。它提供与任务类型 Delete
相同的配置接口(interface),但直接执行。它可以通过项目实例(例如 project.delete 'src/main/gen'
)在脚本的任何地方调用并立即运行,但是因为使用了 project
实例作为整个脚本的范围,仅使用 delete
也足够了。好吧,这并不总是足够的。如果当前作用域提供了一个名为 delete
的方法(具有相同的签名),则将改用此方法。这是 Delete
类型的任务中的情况,这就是您的第一个脚本不起作用的原因:
Delete
类型的任务在 doLast
闭包中配置,该闭包在实际删除应该发生后运行。如果删除 type: Delete
,方法 delete
将不再配置任务,而是立即删除文件,因为它不再是方法 delete
的任务 Delete
,但是 Project
类型的方法 delete
。这工作正常,但应该首选使用真实任务。
如果您从第二个示例中删除 type: Delete
,将会发生同样的事情。文件将被立即删除(现在在配置阶段),而不是配置任务。您不希望出现此行为,因为任务将过时,因为每次调用 Gradle 时文件都会被删除。这就是您提到的一个可能的问题。
关于gradle - 对 Gradle 删除任务感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57974585/
在 spring-security项目,在 build.gradle文件,以下插件可用: apply plugin: 'io.spring.nohttp' apply plugin: 'locks'
我正在尝试使用gradle任务作为“与操作系统无关的shell脚本”。我在编写构建文件的逻辑时没有问题,但是我希望能够从任何文件夹中运行它。 我的第一次尝试是在路径上放置一个带有build.gradl
我在同一目录下有三个具有不同名称的build.gradle dev.build.gradle uat.build.gradle prd.build.gradle 我有4期 “gradle build”
乡亲们 有谁知道如何使用gradle与自定义的build.gradle和settings.gradle一起运行-即两者在一起? 我认为我可以有一个自定义的build.gradle文件(-b标志)-但这
Gradle 配置有两个属性,称为 dependencies和 incoming .根据我的理解,我们可以通过 Gradle 依赖 block 向配置添加依赖,如下所示: dependencies {
我正在测试将我的工件推送到 Nexus Maven 存储库。我正在使用 gradle这样做。 gradle upload有什么区别和 gradle publish ? 最佳答案 目前gradle提供了
这里有一个类似的问题:Gradle properties not being read from ~/.gradle/gradle.properties,但它不能解决我的问题。 在我看来,gradle
如何检索 Gradle 本身的版本 以编程方式从 Gradle 插件中? 最佳答案 刚刚发现可以使用任何一种方法来解决它 getProject().getGradle().getGradleVersi
2 个 gradle 项目,A 和 B,其中 A 定义了对 B 的编译依赖。为 maven 和 gradle 项目启用了 JAR 的重新映射。我试过启用和禁用自定义工具模型。我在 init.d 目录下
如何从 gradle 运行另一个 gradle 脚本。我有多个 gradle 脚本可以在 /test 下运行测试目录。 /build.gradle使用要运行的测试 gradle 文件的名称调用。例如
我已经看到了多模块项目的不同布局,其中有些项目只有一个 build.gradle。而其他项目将有 build.gradle在根和 build.gradle在每个子项目中。我想知道有什么区别以及首选哪种
我对 Gradle 生命周期有一个基本的询问。我的项目是一个多模块项目。 我注意到以下命令: ./gradlew clean bignibou-server:run 不等于运行以下两个命令按顺序运行:
我有一个项目,其中包含一个子项目,如下所示: Root Project |----gradle.build |----SubProject |----|----gradle.build 这里的子项目包
我有 gradle 项目,我想向不使用 gradle 或 maven 等构建工具的项目添加依赖项。 目录结构如下: commonfolder\ gradleProject\ b
我想创建一个类来帮助我加载不同类型的属性(local.properties,gradle.properties,$GRADLE_HOME/gradle.properties,环境变量,系统属性和自定义
我有一个多模块项目,其目录结构如下: proj |-modA |-modB |-modMain \-modSysTest 依赖项是: modB -> modA modMain -> modB modM
我正在尝试创建一个可以在 --offline 模式下工作的 gradle 项目的副本。除了一个步骤,我已经自动化了所有步骤。我无法自动将插件 jar 下载到 gradle 缓存中。 我的离线分发通过指
基本上我想这样做: Use Gradle function from other gradle file 也就是说,从另一个 gradle 脚本中调用一个函数。问题是我的 build.gradle 在
我有一个简单的 gradle 插件,我想试用一下,但我不确定如何“请求”gradle 运行我的测试 这是我要修改的 block (在我的 gradle 构建文件的顶部) buildscript {
在 Android Studio 中创建项目时,我收到以下错误消息。 Failed to import new Gradle project: Could not install Gradle dis
我是一名优秀的程序员,十分优秀!