当前位置: 首页 > 知识库问答 >
问题:

IntelliJ在提交之前运行Gradle任务。怎么阻止?

姚钊
2023-03-14
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:\Users\543829657\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:\Users\543829657\.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:\Users\543829657\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  

共有1个答案

诸经略
2023-03-14

这些任务不会被执行,只会被配置。Gradle区分了配置阶段和执行阶段,在配置阶段执行构建脚本(是的,有点混乱)来配置所有任务,在执行阶段执行选定的任务(来自命令行及其依赖项)。在任务定义之后的闭包中提供的任何代码都是为了配置任务,但在执行阶段不执行。在执行阶段只执行任务操作(由任务类型定义)、DoFirstDoLast闭包。包含代码段中的任务定义的build.gradle文件总是失败,因为您在任何配置阶段都抛出了异常。

现代IDE集成了Gradle(或Maven)等工具来构建项目,但也用于其他任务。所以我假设,一个成功的Gradle配置是一个稳定的IntelliJ项目的必要条件。由于IntelliJ使用(helper)任务来确定为项目提供的任务,因此如果配置阶段失败,它将无法检索这些任务。因此,它将该项目解释为腐败。我不知道Git是如何集成在IntelliJ中的,但我可以想象这种集成需要一个稳定的项目。我想您可以将Gradle项目的失败配置阶段与无法解析的Mavenpom.xml文件进行比较。

我不知道您真正的发布任务是如何定义的,但我可以想象您犯了同样的错误,将执行代码放入配置闭包中,导致任务在每次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'
    }
}
task myDeprecatedTask << {
    println 'Execution phase'
}
 类似资料:
  • 我尝试用JavaExec类型创建gradle任务。在gradle文档中,我发现我不需要使用java插件。但是这个插件与android插件不兼容。如果我没有应用java插件,我会收到以下错误: 错误:无法找到或加载主类包。TestM 我的任务示例: 如果使用相同的任务创建java库模块,则会收到相同的错误: 错误:无法找到或加载主类 也许我需要设置类路径变量?如何在Android Studio中获取

  • 我最近开始了一份新工作,在那里使用了Eclipse和Gradle。为了生成eclipse项目文件,我们运行gradle eclipse任务。现在,我的一些同事说,在运行gradle Eclipse任务之前关闭Eclipse很重要。但是当我看Gradle eclipse插件的文档时https://docs.gradle.org/6.8.1/userguide/eclipse_plugin.html,

  • 我在跑Pop_OS!20.10 [✓] Flutter(Channel stable,1.22.3,Linux,locale en_US.UTF-8)•Flutter版本1.22.3 at/home/samdc/DevTools/Flutter•框架版本8874f21(3个月前),2020-10-29 14:14:35-0700•引擎版本a1440ca392•Dart版本2.10.3•Pub下载镜

  • 我正在从事一个spring boot项目,以自动化与gradle的集成测试。我最近开始在一家新企业工作,我的同事们按如下方式运行集成测试:在构建中。gradle文件有一个集成测试任务 启动任务后,应用程序开始在指定端口运行,然后打开postman,导入集合并运行测试。 我的工作是找到一种方法来跳过额外的点击,即自动运行邮递员集合。第一个想法是使用postman-run gradle插件,但由于企业

  • 我有一个gradle项目,其中“单元测试”和“集成测试”任务定义如下: 我在IntelliJ中创建了一个运行配置来运行所有单元测试,如图像显示: 并对任务“integrationTest”执行了相同的操作: IntelliJ“理解”测试任务并运行它,显示图形结果,如下图所示: 当它运行“集成测试”任务时不会发生同样的情况。结果以文本形式显示,就像我通过命令行运行任务时一样。

  • 我已经创建了3个任务。Task3取决于Task1和Task2的结果。在调试代码时,它会正确执行,但在运行应用程序时,Task3会在Task1和Task2完成之前执行。 示例代码: 提前谢谢。