Gradle 格拉德尔+;PlayFramework:无法解析源依赖关系

Gradle 格拉德尔+;PlayFramework:无法解析源依赖关系,gradle,playframework,dependency-management,Gradle,Playframework,Dependency Management,我正在使用Gradle2.7中新的Play框架支持 具有讽刺意味的是,Play 2.3.x明确依赖于org.scala sbt:io:0.13.8 如果我添加了JAR,Gradle能够从typesafe的存储库解析JAR(不是源代码,只是类) 模型{ 组成部分{ 玩{ 平台游戏:“2.3.7”、scala:“2.10”、java:“1.7” } } } 存储库{ 马文{ 名称“类型安全maven版本” url“https://repo.typesafe.com/typesafe/maven-re

我正在使用Gradle2.7中新的Play框架支持

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

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

模型{
组成部分{
玩{
平台游戏:“2.3.7”、scala:“2.10”、java:“1.7”
}
}
}
存储库{
马文{
名称“类型安全maven版本”
url“https://repo.typesafe.com/typesafe/maven-releases"
}
常春藤{
名称“类型安全常春藤释放”
url“https://repo.typesafe.com/typesafe/ivy-releases"
布局“常春藤”
}
} 
依赖关系{
播放组:“org.scala sbt”,名称:“io”,版本:“0.13.8”,分类器:“jar”,配置:“compile”
}

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

失败:生成失败,出现异常

  • 出了什么问题: 任务“:runPlayBinary”的执行失败。 找不到io-sources.jar(org.scala sbt:io:0.13.8)。 在以下位置搜索:

实际上,我并不关心这些源代码,我只想在运行
gradlew runPlay

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


有什么建议吗?我似乎不知道如何排除或解决源代码依赖关系。

我在Play 2.4和Gradle 2.7中遇到了相同的RuntimeException(NoClassDefFind sbt/Path$)。在我的例子中,根本问题是没有正确定义所有存储库(不包括类型安全常春藤->sbt io未解决->认为我需要声明sbt io依赖项->错误的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'
  }
 }
}

一位好心的Gradle dev回答了我的问题

TL;特定于2.3.7的DR-Gradle/Play bug可以通过使用

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解决了我的问题。

谢谢你的建议。恐怕添加jcenter()和排除“org.scala sbt”的变体并没有使情况好转。当你说“删除显式依赖项”时,你是在整个播放配置中排除sbt还是以其他方式排除sbt?我更新了建议,以明确我只是不想在构建文件中导入“org.scala sbt”。我在Gradle论坛上回答了:找到了关于类型安全常春藤回购的评论: