我刚刚更新了IDE,插件版本和库依赖项,现在我无法构建我的项目。 SBT在执行时抛出java.lang.NoClassDefFoundError: sbt/TrackLevel
。我也无法运行./sbt clean
,因为它试图加载项目并失败并出现相同的错误。
这可能由于各种原因而发生,通常是因为某些不匹配的版本或剩余的缓存。令人惊讶的是,sbt经常不能优雅地处理更新插件,更不用说自己了,这就是我每次决定刷新项目并提升版本时浪费时间的原因。
你知道,以防万一。请注意刚刚更新的插件/依赖项以及更改日志中是否提及了任何内容。通过尝试1时请记住这一点。
这是更新所有(其他)依赖项和插件的好机会(当然,如果这不会破坏您的项目,但除非您已经使用了已弃用的方法,否则不应该这样)。这样做可能会解决问题,因此请查看您在build.sbt
中引用的库依赖项,project/plugins.sbt
中的project/build.properties
和sbt版本本身的插件,并将它们提升到最新版本(请参阅Google和相应的存储库,例如http://mvnrepository.com)。
如果您仍在使用activator
或play
命令来构建项目,请从Play donwload page获取Java / Scala种子或其中一个模板,提取并复制sbt(如果您打算在Linux上构建它),sbt.bat(如果您打算使用)在Windows上运行它和sbt-dist目录到您的项目中,并随意从项目中删除对activator的任何引用。尝试执行./sbt
并查看它是否有效。
既然你还在读这篇文章,那么更新依赖项的可能性并没有真正发挥作用。好吧,至少现在你有一个更新的项目。
删除target/
。删除project/target/
。删除project/project/target/
。诅咒任何人想出那些缓存名称及其路径。 (Protip:在点击删除时保持班次将跳过回收站并永久删除文件。)尝试再次构建项目并希望现在一切正常。
如果它没有完成这项工作,作为最后的手段,我们将删除所有的缓存并重新开始。重复步骤2,以防上一次失败的构建留下一些东西。
导航到您的主文件夹。删除.ivy
和/或.ivy2
。删除.sbt
,或者如果它包含某些配置,您要保留将其重命名为例如.sbt.old
并在之后恢复特定文件。这可能需要一段时间,因为这些目录可能包含数十万个文件。 (你可以在这里删除所有IDE缓存,但我从来没有遇到过这个问题 - 它会在下次启动时重建整个项目,因为你已经销毁了它所依赖的大部分内容)
返回项目文件夹并重新运行./sbt
。这可能需要几分钟,因为它将下载所有依赖项(包括sbt和Play本身)并将它们放置到位。之后,您将获得新项目,就像您在干净的机器上从源代码构建它一样。
如果它仍然不起作用,你可以放心地认为你的构建文件中的错误(三次检查它们)或构建系统中的错误。
我将build.properties中的sbt.version更改为0.13.17并且ide构建我的项目都很好。