我使用Play Java seed创建了一个Play项目:
sbt new playframework/play-java-seed.g8
使用以下选项:
name [play-java-seed]: name
organization [com.example]:
scala_version [2.12.4]:
play_version [2.6.15]:
sbt_version [1.0.4]:
执行sbt run
后我收到了很多警告:
Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0
[info] Loading settings from plugins.sbt,scaffold.sbt ...
[info] Loading project definition from E:\Play\name\project
[info] Updating {file:/E:/Play/name/project/}name-build...
[info] Done updating.
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn] * org.webjars:webjars-locator-core:0.33 is selected over 0.32
[warn] +- com.typesafe:npm_2.12:1.2.1 (depends on 0.32)
[warn] +- com.typesafe.sbt:sbt-web:1.4.3 (scalaVersion=2.12, sbtVersion=1.0) (depends on 0.32)
[warn] * org.codehaus.plexus:plexus-utils:3.0.17 is selected over {2.1, 1.5.5}
[warn] +- org.apache.maven:maven-settings:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-repository-metadata:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-aether-provider:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-model:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-core:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-artifact:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-settings-builder:3.2.2 (depends on 3.0.17)
[warn] +- org.apache.maven:maven-model-builder:3.2.2 (depends on 3.0.17)
[warn] +- org.sonatype.plexus:plexus-sec-dispatcher:1.3 (depends on 1.5.5)
[warn] +- org.eclipse.sisu:org.eclipse.sisu.plexus:0.0.0.M5 (depends on 2.1)
[warn] * com.google.guava:guava:23.0 is selected over {10.0.1, 16.0, 20.0}
[warn] +- io.methvin:directory-watcher:0.3.2 (depends on 23.0)
[warn] +- com.fasterxml.jackson.datatype:jackson-datatype-guava:2.8.8 (depends on 10.0.1)
[warn] +- org.eclipse.sisu:org.eclipse.sisu.plexus:0.0.0.M5 (depends on 10.0.1)
[warn] +- com.spotify:docker-client:8.9.0 (depends on 10.0.1)
[warn] Run 'evicted' to see detailed eviction warnings
[info] Loading settings from build.sbt ...
[info] Set current project to name (in build file:/E:/Play/name/)
[info] Updating {file:/E:/Play/name/}root...
[info] Done updating.
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn] * com.google.guava:guava:22.0 is selected over {19.0, 20.0}
[warn] +- com.typesafe.play:play_2.12:2.6.15 () (depends on 22.0)
[warn] +- org.reflections:reflections:0.9.11 (depends on 20.0)
[warn] +- com.google.inject:guice:4.1.0 (depends on 19.0)
[warn] * com.typesafe.akka:akka-stream_2.12:2.5.11 is selected over 2.4.20
[warn] +- com.typesafe.play:play-streams_2.12:2.6.15 () (depends on 2.5.11)
[warn] +- com.typesafe.akka:akka-http-core_2.12:10.0.13 () (depends on 2.4.20)
[warn] * com.typesafe.akka:akka-actor_2.12:2.5.11 is selected over 2.4.20
[warn] +- com.typesafe.play:play_2.12:2.6.15 () (depends on 2.5.11)
[warn] +- com.typesafe.akka:akka-stream_2.12:2.5.11 () (depends on 2.5.11)
[warn] +- com.typesafe.akka:akka-slf4j_2.12:2.5.11 () (depends on 2.5.11)
[warn] +- com.typesafe.akka:akka-parsing_2.12:10.0.13 () (depends on 2.4.20)
[warn] Run 'evicted' to see detailed eviction warnings
--- (Running the application, auto-reloading is enabled) ---
[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Enter to stop and go back to the console...)
我的机器上安装了java 9.0.4和sbt 1.1.0。
提前感谢您的回答。
这些驱逐警告有一个Github issue开放。由于Play是成熟且广泛使用的框架,因此忽略这些警告很可能是安全的。有三种可能的选择:
evictionWarningOptions
隐藏警告dependencyOverrides
手动覆盖依赖项我个人建议第一个选择。
这里有一点关于eviction warnings。请考虑以下警告:
[warn] * com.typesafe.akka:akka-stream_2.12:2.5.11 is selected over 2.4.20
[warn] +- com.typesafe.play:play-streams_2.12:2.6.15 () (depends on 2.5.11)
[warn] +- com.typesafe.akka:akka-http-core_2.12:10.0.13 () (depends on 2.4.20)
它声明play-streams
和akka-http-core
都依赖于akka-stream
,但它们依赖于它的不同版本。默认情况下,SBT通过选择更高版本(即2.5.11
)来解决冲突。请注意这是如何使akka-http-core
依赖于2.5.11
,即使它只是针对2.4.20
进行编译,换句话说,它现在依赖于未来测试它的未来库。如果2.5.11
不是compatible与2.4.20
,那么这可能会在项目中引入错误。比如说你有一辆建于2001年的汽车,但是你从2002年开始盲目地安装一台发动机。这款汽车现在会像2001年那样表现吗?如果成千上万的司机驾驶这辆车没有任何问题,那可能是安全的。