【问题标题】:Gradle + PlayFramework: Cannot resolve sources dependencyGradle + PlayFramework:无法解析源依赖
【发布时间】:2015-11-14 03:45:40
【问题描述】:

我正在使用 Gradle 2.7 中的新 Play Framework 支持。

具有讽刺意味的是,Play 2.3.x 明确依赖于org.scala-sbt:io:0.13.8

如果我添加,Gradle 能够从 typesafe 的存储库中解析 JAR(不是源,只是类)

model { components { play { platform play: "2.3.7", scala: "2.10", java: "1.7" } } } repositories { maven { name "typesafe-maven-release" url "https://repo.typesafe.com/typesafe/maven-releases" } ivy { name "typesafe-ivy-release" url "https://repo.typesafe.com/typesafe/ivy-releases" layout "ivy" } } dependencies { play group: "org.scala-sbt", name: "io", version: "0.13.8", classifier: "jar", configuration: "compile" }

但是它似乎无法解析io-sources.jar。我明白了:

FAILURE:构建失败并出现异常。

我其实并不关心这些来源,我只是想在运行gradlew runPlay时避免这个运行时异常

执行异常 [RuntimeException: java.lang.NoClassDefFoundError: sbt/Path$]

有什么建议吗?我似乎无法弄清楚如何排除或解决源依赖关系。

【问题讨论】:

标签: gradle playframework dependency-management


【解决方案1】:

我在 Play 2.4 和 Gradle 2.7 中遇到了相同的 RuntimeException (NoClassDefFound sbt/Path$)。在我的情况下,根本问题是没有正确定义所有存储库(不包括 typesafe-ivy -> sbt-io 没有解决 -> 认为我需要声明 sbt-io-dependency -> 导致提到的错误 sbt-io例外...)。

我建议您将 jcenter() 添加为存储库,删除对 sbt 的显式依赖并在 build.gradle 中说明播放版本。例如,我的工作 gradle.build:

plugins {
 id 'play'
}
dependencies {
 repositories {
  jcenter()
  maven {
    name "typesafe-maven-release"
    url "https://repo.typesafe.com/typesafe/maven-releases"
  }
  ivy {
    name "typesafe-ivy-release"
    url "https://repo.typesafe.com/typesafe/ivy-releases"
    layout "ivy"
  }
 }
 play 'com.typesafe.play:play-jdbc_2.11:2.4.3'
 [...other dependencies - but not "org.scala-sbt"!]
}

model {
 components {
  play {
    platform play: '2.4.3', scala: '2.11'
    injectedRoutesGenerator = true
  }
 }
}

在你的情况下,最后一部分应该是:

model {
 components {
  play {
    platform play: '2.3.7', scala: '2.10'
  }
 }
}

【讨论】:

  • 感谢您的建议。恐怕添加 jcenter() 和排除“org.scala-sbt”的变体并没有使事情变得更好。当您说“删除显式依赖”时,您是在整个播放配置中排除 sbt 还是以其他方式排除?
  • 我已经更新了建议,以明确表明我只是不打扰自己在构建文件中导入“org.scala-sbt”。
【解决方案2】:

一位好心的 Gradle 开发人员在 Gradle forums 上回答了我的问题

TL;DR - Gradle/Play 特定于 2.3.7 的错误,可以通过使用来解决

repositories {
    ivy {
        url "https://repo.typesafe.com/typesafe/ivy-releases/"
        layout "pattern", {
            ivy "[organisation]/[module]/[revision]/ivys/ivy.xml"
            artifact "[organisation]/[module]/[revision]/jars/[artifact].[ext]"
        }
    }
}

就我而言,升级到 Play 2.3.9 解决了我的问题。

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 2015-12-19
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2017-12-16
    • 2015-03-03
    相关资源
    最近更新 更多