在我的构建环境中,我们管理自己的常 Spring 藤存储库 . 在我的 build.sbt
文件中,我使用 externalIvySettingsURL
来定义依赖项的位置 .
我能够在我的项目目录中成功运行 sbt
,并且sbt似乎找到了与项目相关的所有依赖项(例如:sbt将正确创建并填充.sbt和.ivy2文件夹) . 当我尝试运行 sbt compile
时,我得到以下堆栈跟踪:
[info] Compiling 7 Scala sources and 21 Java sources to C:\Users\ian.gabriel\workspace\Utils\play\target\scala-2.12\classes ...
:: loading settings :: file = L:\Libs\ivySettings\ivysettings.xml
[info] Attempting to fetch org.scala-sbt:compiler-bridge_2.12:1.0.5.
[error] ## Exception when compiling 28 sources to C:\Users\ian.gabriel\workspace\Utils\play\target\scala-2.12\classes
[error] For input string: "null"
[error] scala.collection.immutable.StringLike.parseBoolean(StringLike.scala:327)
[error] scala.collection.immutable.StringLike.toBoolean(StringLike.scala:286)
[error] scala.collection.immutable.StringLike.toBoolean$(StringLike.scala:286)
[error] scala.collection.immutable.StringOps.toBoolean(StringOps.scala:29)
[error] sbt.internal.librarymanagement.IvyActions$.retrieve(IvyActions.scala:385)
[error] sbt.internal.librarymanagement.IvyActions$.$anonfun$updateEither$6(IvyActions.scala:213)
我发现一个相关的github问题看起来很接近,但应该把它变成我目前正在使用的SBT版本:https://github.com/sbt/librarymanagement/issues/110
github问题指向 sbt.internal.librarymanagement
代码的不同部分而不是我目前遇到的问题 .
从我的 build.sbt
文件中删除 externalIvySettingsURL
设置后,编译过程按预期执行(为无法找到的符号抛出一堆编译错误,这是正常的)
[info] Compiling 7 Scala sources and 21 Java sources to C:\Users\ian.gabriel\workspace\Utils\play\target\scala-2.12\classes ...
[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.4. Compiling...
[info] Compilation completed in 9.776s.
当我使用 externalIvySettingsURL
时,似乎SBT没有尝试编译编译器桥模块 . 编译完该模块后,在sbt控制台中运行 compile
似乎工作正常 . 我有其他开发人员在第一次编译播放项目时,或者当他们的 ~/.sbt
文件夹被删除时会遇到此问题 .
这是SBT中我应该报告的错误,还是我做错了什么?
提前致谢!
1 回答
据我所知,事实证明这是SBT中的一个错误 . 我在他们的github上提出了一个问题:
https://github.com/sbt/librarymanagement/issues/195
我对此问题的解决方法是添加
<property name="sbt.managedChecksums" value="False"/>
到我的ivySettings.xml,它停止了抛出异常 . 如果不存在,我不确定该密钥的默认值是什么,也没有时间完全读取SBT代码以确定该设置的用途 . 这确实设法修复我的构建,但它可能有其他我不知道的副作用 . 祝好运!