【问题标题】:Gradle Error while building a scala code构建scala代码时出现Gradle错误
【发布时间】:2015-09-03 11:59:46
【问题描述】:

我在构建 scala 代码时遇到了一个 gradle 问题。

$gradle makeJar

错误:org.gradle.api.tasks.TaskExecutionException:

任务 ':compileScala' 执行失败。

原因:java.lang.NoClassDefFoundError: scala/Function1

$gradle -v

Gradle 版本 - 1.6

groovy - 1.8.6

蚂蚁 - 1.8.4

常春藤 - 2.2.0

jvm - 1.7.0_55

操作系统 - Linux 2.6x

我的 build.gradle 文件在下面 -

sourceCompatibility = '1.6'
apply plugin: 'scala'
def mypath = 'file://'+new File('test/lib').absolutePath
repositories {
flatDir dirs:"${mypath}"
}
configurations{
 scalaPackage
}
sourceSets{
 main{
  scala{
    srcDirs = ['test/src/scala']
  }
 }
}
dependencies {
  compile fileTree(dir: mypath, includes: ['*.jar'])
  }
  task sourcePath{
    sourceSets.main.scala.srcDirs = sourceSets.main.scala.srcDirs
    sourceSets.main.java.srcDirs = []
  }
  task makeJar(type: Jar, dependsOn: compileScala){
    archivename = "mytest.jar"
    destinationDir = file("test/oplib")
    from "build/classes"
    classpath = configurations.scalaPackage
  }
  compileScala.dependsOn sourcePath

================================================ ===========

这里,我的 scala 源代码存在于 - ./test/src/scala/test.scala

scala jar 文件存在于 - ./test/lib

预期的输出位置 - ./test/oplib

build.gradle 文件是否有任何问题可能导致此错误。请建议。

非常感谢,普拉莱

【问题讨论】:

    标签: java scala ant gradle build.gradle


    【解决方案1】:

    我使用您的 build.gradle 文件并使用 Gradle 版本 2.3 的 Gradle Wrapper 启动它

    首先是gradlew

    然后我做了3个更正:

    apply plugin: 'scala'
    sourceCompatibility = '1.6'
    def mypath = 'file://'+new File('test/lib').absolutePath
    repositories {
    flatDir dirs:"${mypath}"
    }
    configurations{
     scalaPackage
    }
    sourceSets{
     main{
      scala{
        srcDirs = ['test/src/scala']
      }
     }
    }
    dependencies {
      compile fileTree(dir: mypath, includes: ['*.jar'])
      }
      task sourcePath{
        sourceSets.main.scala.srcDirs = sourceSets.main.scala.srcDirs
        sourceSets.main.java.srcDirs = []
      }
      task makeJar(type: Jar, dependsOn: compileScala){
        archiveName = "mytest.jar"
        destinationDir = file("test/oplib")
        from "build/classes"
        // classpath = configurations.scalaPackage
      }
      compileScala.dependsOn sourcePath
    
    1. 在 Scala 插件导入后移动 sourceCompatibility 行
    2. 写archiveName代替archivename
    3. 注释掉classpath

    然后我运行 gradlew tasks 和 gradlew makeJar 没有错误。

    【讨论】:

    • 我尝试了您提出的更改,但它导致与 Gradle 1.6 中以前相同的错误。
    【解决方案2】:

    Scala 项目需要声明一个 scala-library 依赖项。
    将此添加到您的 build.grade 文件中:

    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile 'org.scala-lang:scala-library:2.11.1'
    }
    

    【讨论】:

    • 您好,我已尝试使用上述选项。但它仍然失败并出现同样的错误。我猜在我的情况下,scala 带有 spark(version 1.2.0) 包。我曾尝试将 SCALA_HOME 设置为 spark home,但效果不佳。
    【解决方案3】:

    如果你使用 spark-core_2.11 版本 1.2.0,你可以定义你的依赖如下:

    repositories {
        mavenCentral()
    }
    
    dependencies {
        compile 'org.apache.spark:spark-core_2.11:1.2.0'
    }
    

    这个依赖有Scala

    org.scala-lang / scala-library / from 2.11.2 to 2.11.7
    

    作为间接依赖见

    Maven Repository Search for spark-core

    【讨论】:

    • 我们有下面的 jar 用于 CDH 5.3.2 - spark-assembly-1.2.0-cdh-5.3.2-.jar。因此,我尝试使用以下依赖项 - compile 'org.apache.spark:soark-assembly:1.2.0-cdh5.3.2' ;但不幸的是,gradle 脚本无法识别此引用并将错误抛出为“找不到依赖项。我已将此 jar 保存在我的构建路径中,并且我可以运行 spark-shell 或 spark-submit 这让我认为火花程序集jar 在构建路径中被正确引用。
    猜你喜欢
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 2021-02-09
    • 2017-12-22
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多