Gradle 为什么运行时依赖关系没有';你不在格拉德尔工作吗?

Gradle 为什么运行时依赖关系没有';你不在格拉德尔工作吗?,gradle,apache-spark,Gradle,Apache Spark,我有一个简单的spark应用程序和gradle 2.3,spark guide说spark LIB不需要捆绑,所以我在build.gradle中使用“运行时”依赖项,如下所示: apply plugin: 'java' apply plugin: 'idea' apply plugin: 'scala' apply plugin: 'maven' repositories { mavenCentral() } dependencies { compile 'org.sca

我有一个简单的spark应用程序和gradle 2.3,spark guide说spark LIB不需要捆绑,所以我在build.gradle中使用“运行时”依赖项,如下所示:

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'scala'
apply plugin: 'maven'


repositories {

    mavenCentral()
}

dependencies {
    compile 'org.scala-lang:scala-library:2.10.5'
    runtime 'org.apache.spark:spark-core_2.10:1.3.1'
    runtime 'org.apache.spark:spark-streaming_2.10:1.3.1'
    compile 'com.datastax.spark:spark-cassandra-connector_2.10:1.2.0-rc3'

    testCompile group: 'junit', name: 'junit', version: '4.11'
}
然而,当我运行“类”任务时,我得到了错误。这意味着编译器找不到jar。我还尝试了'provided'和'providedCompile',结果是“没有提供任何方法()/providedCompile()”


查看gradledocs(),我认为运行时意味着它只在运行时需要。我相信,如果您将它切换到编译,它也将包含在运行时中(这个措辞有点让人困惑,但如果你看一下testCompile的措辞,它要么意味着测试中包含的所有内容都是在生产代码中发布的——这将是非常不标准的——要么意味着默认情况下testCompile包含所有编译元素,就像运行时一样).

提供的
/
提供的编译
配置在某些插件或构建脚本创建它们之前不存在。您可以使用插件,也可以在您的计算机上这样做

configurations {
  provided
}
sourceSets {
  main {
    compileClasspath += [configurations.provided]
  }
}
dependencies {
  provided 'org.apache.hadoop:hadoop-core:2.5.0-mr1-cdh5.3.0'
  compile ...
  testCompile 'org.apache.mrunit:mrunit:1.0.0'
}
jar {
  doFirst {
    into('lib') { from configurations.runtime }
  }
}
idea {
  module {
    scopes.PROVIDED.plus += [configurations.provided]
  }
}

本例还将compile中的库添加到JAR的
lib
文件夹中,以便于将它们作为Hadoop作业运行。对于Spark,您可能需要创建着色JAR或“uber”JAR。这将添加编译依赖项(未提供)。

感谢您的回答。我转向SBT,它有汇编插件来帮助构建“uber”不过,也会出现其他问题,因为Gradle有一些#fatjar插件。您可以在插件门户上搜索它们
configurations {
  provided
}
sourceSets {
  main {
    compileClasspath += [configurations.provided]
  }
}
dependencies {
  provided 'org.apache.hadoop:hadoop-core:2.5.0-mr1-cdh5.3.0'
  compile ...
  testCompile 'org.apache.mrunit:mrunit:1.0.0'
}
jar {
  doFirst {
    into('lib') { from configurations.runtime }
  }
}
idea {
  module {
    scopes.PROVIDED.plus += [configurations.provided]
  }
}