IntelliJ 在提交前运行 Gradle 个任务。如何阻止它?
IntelliJ runs Gradle tasks before commit. How to stop that?
我已将一个小示例任务添加到项目文件夹之一的 gradle.build 中:
task fail {
println "ready to fail..."
throw(new Exception("This should not be reached!"))
}
当我尝试提交这个非常 gradle.build 的文件时,它失败并显示消息:
9:53 Commit failed with error
0 files committed, 1 file failed to commit: A useful commit transaction abort!
rollback completed
abort: The system cannot find the file specified
当我查看日志时,我看到那里:
Caused by: java.lang.Exception: This should not be reached!
...
2017-07-19 10:22:55,233 [ 247646] INFO - .BaseProjectImportErrorHandler - Failed to import Gradle project at 'C:/Users/543829657/workspace/dev.appl.ib.cbl' org.gradle.tooling.BuildException: Could not run build action using Gradledistribution 'https://services.gradle.org/distributions/gradle-3.2.1-bin.zip'.
Caused by: org.gradle.internal.exceptions.LocationAwareException: Build file 'C:\Users3829657\workspace\dev.appl.ib.cbl\application\build.gradle' line: 276
...
Caused by: java.lang.Exception: This should not be reached!
...
而且,令人惊讶的是,在日志的末尾出现了关于丢失文件的奇怪消息:
2017-07-19 10:23:05,307 [ 257720] INFO - ea.execution.HgCommandExecutor - hg.exe commit
--logfile C:\Users3829657\.IntelliJIdea2017.1\system\.hg4idea-commit.tmp application\build.gradle
2017-07-19 10:23:07,655 [ 260068] INFO - ea.execution.HgCommandExecutor - transaction abort!
rollback completed
abort: The system cannot find the file specified
2017-07-19 10:24:38,784 [ 351197] INFO - ea.execution.HgCommandExecutor - hg.exe incoming
2017-07-19 10:24:49,856 [ 362269] INFO - ea.execution.HgCommandExecutor - hg.exe outgoing
2017-07-19 10:27:32,259 [ 524672] INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from C:/Program Files/Java/jdk1.8.0_72
2017-07-19 10:27:32,299 [ 524712] INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from C:/Program Files/Java/jdk1.8.0_72
2017-07-19 10:27:32,319 [ 524732] INFO - xecution.GradleExecutionHelper - Passing command-line args to Gradle Tooling API: -Didea.version=2017.1.5
-Didea.resolveSourceSetDependencies=true
-Pandroid.injected.build.model.only=true
-Pandroid.injected.build.model.only.advanced=true
-Pandroid.injected.invoked.from.ide=true
-Pandroid.injected.studio.version=2017.1.5.0.0 --init-script C:\Users3829657\AppData\Local\Temp\ijinit.gradle
2017-07-19 10:27:33,554 [ 525967] INFO - ntellij.analysis.SonarLintTask - Running SonarLint Analysis for 'build.gradle'
2017-07-19 10:27:33,751 [ 526164] INFO - ntellij.analysis.SonarLintTask - SonarLint analysis done
2017-07-19 10:27:56,522 [ 548935] INFO - pl.ProjectRootManagerComponent - project roots have changed
2017-07-19 10:27:56,835 [ 549248] INFO - .diagnostic.PerformanceWatcher - Pushing properties took 51ms; general responsiveness: ok; EDT responsiveness: ok
2017-07-19 10:27:56,947 [ 549360] INFO - pl.ProjectRootManagerComponent - project roots have changed
2017-07-19 10:27:56,957 [ 549370] INFO - indexing.UnindexedFilesUpdater - Unindexed files update canceled
2017-07-19 10:27:57,084 [ 549497] INFO - .diagnostic.PerformanceWatcher - Pushing properties took 33ms; general responsiveness: ok; EDT responsiveness: ok
2017-07-19 10:27:57,328 [ 549741] INFO - .diagnostic.PerformanceWatcher - Indexable file iteration took 244ms; general responsiveness: ok; EDT responsiveness: ok
2017-07-19 10:29:38,745 [ 651158] INFO - ea.execution.HgCommandExecutor - hg.exe incoming
2017-07-19 10:29:56,117 [ 668530] INFO - ea.execution.HgCommandExecutor - hg.exe outgoing
2017-07-19 10:34:38,752 [ 951165] INFO - ea.execution.HgCommandExecutor - hg.exe incoming
2017-07-19 10:34:54,816 [ 967229] INFO - ea.execution.HgCommandExecutor - hg.exe outgoing
我不希望 IntelliJ 在每次提交之前 运行 gradle 任务。另外,我不明白为什么 "file not found" 被声明为失败的原因,而不是真正的失败原因。
当然,我真的有一个真正的任务有问题,但它现在被注释掉了,在它相对纯粹的状态下有问题。这是一项发布任务,显然,我不需要 运行宁 IDE 的意愿。更糟糕的是,它不是从正确的目录启动的,并因此创建了无效的文件夹。
P.S。当然,我已经尝试过重启和缓存失效。
任务未执行,仅配置。 Gradle 区分 配置阶段 ,其中执行构建脚本(是的,有点混乱)以配置 所有任务 ,和执行阶段,其中选定任务(来自命令行及其依赖项)被执行。任务定义后闭包中提供的任何代码都用于配置任务,但不会在 执行阶段 期间执行。在 执行阶段 期间仅执行任务操作(由任务类型定义)、doFirst
和 doLast
闭包。包含代码段任务定义的 build.gradle
文件将 总是 失败,因为您在任何 配置阶段 .
现代 IDE 集成了 Gradle(或 Maven)之类的工具来构建项目,但也用于其他任务。所以我假设,成功的 Gradle 配置是稳定 IntelliJ 项目的必要条件。由于 IntelliJ 使用(帮助程序)任务来确定为项目提供的任务,如果 配置阶段 失败,它无法检索它们。因此它将项目解释为已损坏。我不知道 Git 是如何集成到 IntelliJ 中的,但我可以想象这种集成需要一个稳定的项目。我想您可以将 Gradle 项目的失败 配置阶段 与无法解析的 Maven pom.xml
文件进行比较。
我不知道你真正的发布任务是如何定义的,但我可以想象你犯了同样的错误,将执行代码放入配置闭包中,导致任务在每个 "executed" Gradle 调用,即使是通过 IntelliJ 提交。
task myTask() {
// Executed when the task is defined, everytime you run gradle
println 'Configuration phase'
doLast {
// Executed on task execution, only if the task is specified (CMD or task dependency)
println 'Execution phase'
}
}
请注意,Gradle 有一项 已弃用 的功能,这可能导致了这一阶段的混乱。您可以(但不应该)使用 <<
运算符定义一个任务,它会自动创建一个 doLast
闭包:
task myDeprecatedTask << {
println 'Execution phase'
}
我已将一个小示例任务添加到项目文件夹之一的 gradle.build 中:
task fail {
println "ready to fail..."
throw(new Exception("This should not be reached!"))
}
当我尝试提交这个非常 gradle.build 的文件时,它失败并显示消息:
9:53 Commit failed with error
0 files committed, 1 file failed to commit: A useful commit transaction abort!
rollback completed
abort: The system cannot find the file specified
当我查看日志时,我看到那里:
Caused by: java.lang.Exception: This should not be reached!
...
2017-07-19 10:22:55,233 [ 247646] INFO - .BaseProjectImportErrorHandler - Failed to import Gradle project at 'C:/Users/543829657/workspace/dev.appl.ib.cbl' org.gradle.tooling.BuildException: Could not run build action using Gradledistribution 'https://services.gradle.org/distributions/gradle-3.2.1-bin.zip'.
Caused by: org.gradle.internal.exceptions.LocationAwareException: Build file 'C:\Users3829657\workspace\dev.appl.ib.cbl\application\build.gradle' line: 276
...
Caused by: java.lang.Exception: This should not be reached!
...
而且,令人惊讶的是,在日志的末尾出现了关于丢失文件的奇怪消息:
2017-07-19 10:23:05,307 [ 257720] INFO - ea.execution.HgCommandExecutor - hg.exe commit
--logfile C:\Users3829657\.IntelliJIdea2017.1\system\.hg4idea-commit.tmp application\build.gradle
2017-07-19 10:23:07,655 [ 260068] INFO - ea.execution.HgCommandExecutor - transaction abort!
rollback completed
abort: The system cannot find the file specified
2017-07-19 10:24:38,784 [ 351197] INFO - ea.execution.HgCommandExecutor - hg.exe incoming
2017-07-19 10:24:49,856 [ 362269] INFO - ea.execution.HgCommandExecutor - hg.exe outgoing
2017-07-19 10:27:32,259 [ 524672] INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from C:/Program Files/Java/jdk1.8.0_72
2017-07-19 10:27:32,299 [ 524712] INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from C:/Program Files/Java/jdk1.8.0_72
2017-07-19 10:27:32,319 [ 524732] INFO - xecution.GradleExecutionHelper - Passing command-line args to Gradle Tooling API: -Didea.version=2017.1.5
-Didea.resolveSourceSetDependencies=true
-Pandroid.injected.build.model.only=true
-Pandroid.injected.build.model.only.advanced=true
-Pandroid.injected.invoked.from.ide=true
-Pandroid.injected.studio.version=2017.1.5.0.0 --init-script C:\Users3829657\AppData\Local\Temp\ijinit.gradle
2017-07-19 10:27:33,554 [ 525967] INFO - ntellij.analysis.SonarLintTask - Running SonarLint Analysis for 'build.gradle'
2017-07-19 10:27:33,751 [ 526164] INFO - ntellij.analysis.SonarLintTask - SonarLint analysis done
2017-07-19 10:27:56,522 [ 548935] INFO - pl.ProjectRootManagerComponent - project roots have changed
2017-07-19 10:27:56,835 [ 549248] INFO - .diagnostic.PerformanceWatcher - Pushing properties took 51ms; general responsiveness: ok; EDT responsiveness: ok
2017-07-19 10:27:56,947 [ 549360] INFO - pl.ProjectRootManagerComponent - project roots have changed
2017-07-19 10:27:56,957 [ 549370] INFO - indexing.UnindexedFilesUpdater - Unindexed files update canceled
2017-07-19 10:27:57,084 [ 549497] INFO - .diagnostic.PerformanceWatcher - Pushing properties took 33ms; general responsiveness: ok; EDT responsiveness: ok
2017-07-19 10:27:57,328 [ 549741] INFO - .diagnostic.PerformanceWatcher - Indexable file iteration took 244ms; general responsiveness: ok; EDT responsiveness: ok
2017-07-19 10:29:38,745 [ 651158] INFO - ea.execution.HgCommandExecutor - hg.exe incoming
2017-07-19 10:29:56,117 [ 668530] INFO - ea.execution.HgCommandExecutor - hg.exe outgoing
2017-07-19 10:34:38,752 [ 951165] INFO - ea.execution.HgCommandExecutor - hg.exe incoming
2017-07-19 10:34:54,816 [ 967229] INFO - ea.execution.HgCommandExecutor - hg.exe outgoing
我不希望 IntelliJ 在每次提交之前 运行 gradle 任务。另外,我不明白为什么 "file not found" 被声明为失败的原因,而不是真正的失败原因。
当然,我真的有一个真正的任务有问题,但它现在被注释掉了,在它相对纯粹的状态下有问题。这是一项发布任务,显然,我不需要 运行宁 IDE 的意愿。更糟糕的是,它不是从正确的目录启动的,并因此创建了无效的文件夹。
P.S。当然,我已经尝试过重启和缓存失效。
任务未执行,仅配置。 Gradle 区分 配置阶段 ,其中执行构建脚本(是的,有点混乱)以配置 所有任务 ,和执行阶段,其中选定任务(来自命令行及其依赖项)被执行。任务定义后闭包中提供的任何代码都用于配置任务,但不会在 执行阶段 期间执行。在 执行阶段 期间仅执行任务操作(由任务类型定义)、doFirst
和 doLast
闭包。包含代码段任务定义的 build.gradle
文件将 总是 失败,因为您在任何 配置阶段 .
现代 IDE 集成了 Gradle(或 Maven)之类的工具来构建项目,但也用于其他任务。所以我假设,成功的 Gradle 配置是稳定 IntelliJ 项目的必要条件。由于 IntelliJ 使用(帮助程序)任务来确定为项目提供的任务,如果 配置阶段 失败,它无法检索它们。因此它将项目解释为已损坏。我不知道 Git 是如何集成到 IntelliJ 中的,但我可以想象这种集成需要一个稳定的项目。我想您可以将 Gradle 项目的失败 配置阶段 与无法解析的 Maven pom.xml
文件进行比较。
我不知道你真正的发布任务是如何定义的,但我可以想象你犯了同样的错误,将执行代码放入配置闭包中,导致任务在每个 "executed" Gradle 调用,即使是通过 IntelliJ 提交。
task myTask() {
// Executed when the task is defined, everytime you run gradle
println 'Configuration phase'
doLast {
// Executed on task execution, only if the task is specified (CMD or task dependency)
println 'Execution phase'
}
}
请注意,Gradle 有一项 已弃用 的功能,这可能导致了这一阶段的混乱。您可以(但不应该)使用 <<
运算符定义一个任务,它会自动创建一个 doLast
闭包:
task myDeprecatedTask << {
println 'Execution phase'
}