首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在一个环境中,我会在sbt中得到冲突的跨版本,而不是另一个环境?

为什么在一个环境中,我会在sbt中得到冲突的跨版本,而不是另一个环境?
EN

Stack Overflow用户
提问于 2015-05-06 21:51:52
回答 1查看 7.1K关注 0票数 7

我有一个具有以下依赖性的sbt项目:

代码语言:javascript
复制
libraryDependencies ++= Seq(
  "org.scalatra"           %% "scalatra"          % ScalatraVersion,
  "org.scalatra"           %% "scalatra-scalate"  % ScalatraVersion,
  "org.scalatra"           %% "scalatra-specs2"   % ScalatraVersion   % "test",
  "ch.qos.logback"         %  "logback-classic"   % "1.1.2"           % "runtime",
  "org.eclipse.jetty"      %  "jetty-webapp"      % "9.1.5.v20140505" % "container",
  "org.eclipse.jetty"      %  "jetty-plus"        % "9.1.5.v20140505" % "container",
  "javax.servlet"          %  "javax.servlet-api" % "3.1.0",
  "org.sorm-framework"     %  "sorm"              % "0.3.18",
  "com.h2database"         %  "h2"                % "1.4.187",
  "org.fusesource.scalamd" %  "scalamd_2.10"      % "1.6"
)

在一台机器上,我可以在没有问题的情况下运行./sbt;在另一台机器上,我得到

代码语言:javascript
复制
[error] Modules were resolved with conflicting cross-version suffixes in {file:/C:/dev/scalaspace/game-tracker/}game-tracker:
[error]    org.scala-lang.modules:scala-xml _2.11, _2.12.0-M1
[error]    org.scala-lang.modules:scala-parser-combinators _2.11, _2.12.0-M1

我已经把问题和解决办法隔离开来了。Sorm依赖于2.12.0-M1编译器:

代码语言:javascript
复制
[info]   +-org.sorm-framework:sorm:0.3.18 [S]
[info]     +-com.github.nikita-volkov:embrace:0.1.4 [S]
[info]     | +-org.scala-lang:scala-compiler:2.12.0-M1 [S]
[info]     |   +-org.scala-lang.modules:scala-parser-combinators_2.12.0-M1:1.0.4 [S]
[info]     |   +-org.scala-lang.modules:scala-xml_2.12.0-M1:1.0.4 [S]
[info]     |   +-org.scala-lang:scala-reflect:2.11.0 [S] (evicted by: 2.11.6)
[info]     |   +-org.scala-lang:scala-reflect:2.11.6 [S]
[info]     |   +-org.scala-lang:scala-reflect:2.12.0-M1 (evicted by: 2.11.0)

通过将exclude("org.scala-lang","scala-compiler")添加到sorm依赖项中,我可以在这两个位置构建项目。但是为什么这种行为不一致呢?这两个环境都使用相同版本的sbt (0.13.8)和scala (2.11.6)。有什么不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 22:25:28

考虑到Com.github.nikita-volkov:拥抱的pom,我猜这是由于使用了版本范围和缓存相结合的原因:

代码语言:javascript
复制
<dependency>
  <groupId>org.scala-lang</groupId>
  <artifactId>scala-compiler</artifactId>
  <version>[2.10,3)</version>
  <scope>compile</scope>
</dependency>

特别是考虑到Scala2.12.0-M1昨天发布了:

  • http://www.scala-lang.org/news/2.12.0-M1

要解决不一致的问题,需要清除常春藤缓存:

代码语言:javascript
复制
rm -r ~/.ivy2/cache

但是,您也希望修复scala-compiler使用的版本,并且希望它与配置的scalaVersion匹配。

代码语言:javascript
复制
dependencyOverrides += "org.scala-lang" % "scala-compiler" % scalaVersion.value

请参阅“库管理文档”的重写版本部分中的详细信息。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30088274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档