Gradle + PlayFramework:无法解析源依赖项

时间:2015-09-15 17:01:35

标签: gradle playframework dependency-management

我在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。我明白了:

  

失败:构建因异常而失败。

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

  

执行例外   [RuntimeException:java.lang.NoClassDefFoundError:sbt / Path $]

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

2 个答案:

答案 0 :(得分: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'
  }
 }
}

答案 1 :(得分:0)

善良的Gradle开发人员在Gradle forums

上回答了我的问题

TL; DR - 特定于2.3.7的Gradle / Play错误,可以使用

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