如果找不到文件依赖项,如何使Gradle无法构建?

时间:2017-03-01 09:14:21

标签: java gradle

我有一个Gradle构建,它有一些

形式的依赖项
compile files('path/to/local/lib.jar')

(正在迁移构建 - 最终将替换它们)

构建失败,因为未正确指定其中一个路径。但它由于编译错误而失败 - 看起来Gradle默默地忽略了丢失的依赖项。

如果无法解决任何依赖关系(特别是本地文件依赖关系)(例如,文件丢失),是否有一个简单的选项或开关会强制Gradle使构建失败?

编辑:进一步澄清:

如果在配置的存储库中找不到依赖项,Gradle将在尝试解析它时失败,如预期的那样。

但是 - 如果依赖项定义为"编译文件....",并且在构建时指定的文件不存在,Gradle将忽略该错误,并尝试编译。这似乎是引人注目的错误的头脑和不一致的默认行为。

我的问题是 - 是否有Gradle选项或开关或环境变量或系统属性,我可以设置为强制Gradle验证文件依赖性是否存在? (例如,以理智和理性的方式行事?)

3 个答案:

答案 0 :(得分:0)

要使构建失败,您可以:

ant.fail('message why it failed')

然后你可以制作一个条件,然后使用好消息使构建失败;)

我建议创建一个任务,首先将文件带到项目中,条件是检查文件是否可用等等,然后抛出Gradle异常并使构建失败,并首先执行任务在执行阶段。

我现在没有机会测试它,但它可能是这样的,如果任何语法错误,请纠正我 - 但你应该明白这一点。

def yourDep = $/\path\to\your\depdendency/$

task bringDeps << {

  if (yourDep.exists()){
    copy {
      from yourDep
      into $projectDir/depsOrSmthg
    }
  } else{
  ant.fail('message why it failed')
  }

}

答案 1 :(得分:0)

您可以执行以下操作。它不是内置的Gradle函数,但不需要专门检查每个依赖项的代码(它会检查compile配置中的所有依赖项):

apply plugin: 'java'

dependencies {
    compile files('lib/abc.jar')
    compile files('lib/def.jar')
}

task checkDependencies() {
    doLast {
        configurations.compile.each { file ->
            assert file.exists() 
        }
    }
}

compileJava.dependsOn checkDependencies

答案 2 :(得分:0)

[Vue warn]: Multiple root nodes returned from render function. Render function should return a single root node.