Playframework 玩2.x构建导致sbt失败,出现NoClassDefFoundError

Playframework 玩2.x构建导致sbt失败,出现NoClassDefFoundError,playframework,sbt,Playframework,Sbt,我刚刚更新了IDE、插件版本和库依赖项,现在我无法构建我的项目。SBT在执行时抛出java.lang.NoClassDefFoundError:SBT/TrackLevel。我也无法运行./sbt clean,因为它试图加载项目,但失败了,出现了相同的错误。这可能是由于各种原因造成的,通常是因为一些不匹配的版本或剩余的缓存。令人惊讶的是,sbt往往无法优雅地处理插件更新,更不用说它本身了,这也是我每次决定刷新我的项目和升级版本时都要浪费几个小时的原因 尝试0:检查已知版本不兼容 你知道,以防万一

我刚刚更新了IDE、插件版本和库依赖项,现在我无法构建我的项目。SBT在执行时抛出java.lang.NoClassDefFoundError:SBT/TrackLevel。我也无法运行./sbt clean,因为它试图加载项目,但失败了,出现了相同的错误。

这可能是由于各种原因造成的,通常是因为一些不匹配的版本或剩余的缓存。令人惊讶的是,sbt往往无法优雅地处理插件更新,更不用说它本身了,这也是我每次决定刷新我的项目和升级版本时都要浪费几个小时的原因

尝试0:检查已知版本不兼容 你知道,以防万一。请注意您刚刚更新的插件/依赖项,以及它的变更日志中是否提到了任何内容。在进行尝试1时,请记住这一点

尝试1:更新依赖项 当然,这是一个很好的机会来更新所有其他依赖项和插件,如果这不会破坏您的项目,但不应该这样,除非您已经在使用不推荐的方法。这样做可能会解决问题,因此请在build.sbt、project/plugins.sbt中的插件和project/build.properties中的sbt版本本身中查找您正在引用的库依赖项,并将它们更新为最新版本。请咨询Google和相应的存储库,例如

如果您仍在使用activator或play命令构建项目,请从中获取Java/Scala种子或其中一个模板,如果您打算在Linux上构建sbt,请提取并复制sbt;如果您打算在Windows上运行sbt,请在项目中的sbt dist目录下运行sbt.bat,并随时删除对activator的任何引用。尝试执行./sbt,看看它是否有效

尝试2:删除项目缓存 既然您还在读这篇文章,更新依赖项可能并没有真正起到作用。好吧,至少现在你有了一个更新的项目

删除目标/。删除项目/目标/。删除项目/项目/目标/。诅咒那些提供缓存名称和路径的人。Protip:按住shift键同时单击delete将跳过回收站并永久删除文件。尝试重新建造项目,希望现在一切都好

尝试3:删除全局生成缓存 万一它没用,作为最后的手段,我们会移除所有的缓存,重新开始。重复步骤2,以防上一个失败的构建留下了一些东西

导航到您的主文件夹。移除.ivy和/或.ivy2。删除.sbt,或者如果它包含一些您想要保留的配置,请将其重命名为例如.sbt.old,然后还原特定文件。这可能需要一段时间,因为这些目录可能包含成千上万的文件。您可以在这里删除所有IDE缓存,但我从未遇到过这一问题——它将在下一次启动时重建整个项目,因为您已经销毁了它所依赖的大部分缓存

返回项目文件夹并重新运行。/sbt。这可能需要几分钟,因为它将下载所有依赖项,包括sbt和Play本身,并将它们放置到位。之后,您将拥有一个新的项目,就像您是在一台干净的机器上从源代码构建它一样


如果它仍然不起作用,您可以放心地认为它是构建文件中的错误,或者是构建系统中的错误。

这可能是由于各种原因造成的,通常是由于一些不匹配的版本或剩余缓存。令人惊讶的是,sbt往往无法优雅地处理插件更新,更不用说它本身了,这也是我每次决定刷新我的项目和升级版本时都要浪费几个小时的原因

尝试0:检查已知版本不兼容 你知道,以防万一。请注意您刚刚更新的插件/依赖项,以及它的变更日志中是否提到了任何内容。在进行尝试1时,请记住这一点

尝试1:更新依赖项 当然,这是一个很好的机会来更新所有其他依赖项和插件,如果这不会破坏您的项目,但不应该这样,除非您已经在使用不推荐的方法。这样做可能会解决问题,因此请在build.sbt、project/plugins.sbt中的插件和project/build.properties中的sbt版本本身中查找您正在引用的库依赖项,并将它们更新为最新版本。请咨询Google和相应的存储库,例如

如果您仍在使用activator或play命令构建项目,请从中获取Java/Scala种子或其中一个模板,如果您打算在Linux上构建sbt,请提取并复制sbt;如果您打算在Windows上运行sbt,请在项目中的sbt dist目录下运行sbt.bat,并随时删除对activator的任何引用。尝试执行./sbt,看看它是否有效

尝试2:删除项目缓存 既然您还在读这篇文章,更新依赖项可能并没有真正起到作用。好吧,至少现在你有了 更新的项目

删除目标/。删除项目/目标/。删除项目/项目/目标/。诅咒那些提供缓存名称和路径的人。Protip:按住shift键同时单击delete将跳过回收站并永久删除文件。尝试重新建造项目,希望现在一切都好

尝试3:删除全局生成缓存 万一它没用,作为最后的手段,我们会移除所有的缓存,重新开始。重复步骤2,以防上一个失败的构建留下了一些东西

导航到您的主文件夹。移除.ivy和/或.ivy2。删除.sbt,或者如果它包含一些您想要保留的配置,请将其重命名为例如.sbt.old,然后还原特定文件。这可能需要一段时间,因为这些目录可能包含成千上万的文件。您可以在这里删除所有IDE缓存,但我从未遇到过这一问题——它将在下一次启动时重建整个项目,因为您已经销毁了它所依赖的大部分缓存

返回项目文件夹并重新运行。/sbt。这可能需要几分钟,因为它将下载所有依赖项,包括sbt和Play本身,并将它们放置到位。之后,您将拥有一个新的项目,就像您是在一台干净的机器上从源代码构建它一样

如果它仍然不起作用,您可以放心地认为是构建文件中的错误再次检查它们,或者是构建系统中的错误。

我将build.properties中的sbt.version更改为0.13.17,ide构建我的项目一切正常。

我将build.properties中的sbt.version更改为0.13.17,ide构建我的项目一切正常