我遇到了编译错误:
[warn] Class com.google.api.client.auth.oauth2.Credential not found - continuing with a stub.
[error] error while loading GoogleService, class file '....../gdata-core-1.0.jar(com/google/gdata/client/GoogleService.class)' is broken
我发现了similar question,但无法成功使用其解决方案。我如何根据Scala编译器跟踪这个罐子里实际破坏的东西(即获得实际破坏的细节),以确定解决方案应该是什么?
我认为这个Google jar的构建来源是here。
注意:与其他问题不同,在我的情况下,根据这些google setup instructions,google jar在我的项目中,lib
目录中不受管理。 < / p>
答案 0 :(得分:1)
如链接的答案中所述,当类包含类路径中不再存在的某些注释时,会发生此错误。 Java认为这是可以接受的,但Scala没有。您通常只会遇到大量优化的Java库,而他们故意排除“不必要的”注释。谷歌为他们的许多代码做了这件事;说实话,我认为我从来没有在任何非谷歌图书馆看到这个问题。
实用的解决方案是使用advanced search on maven central查找包含缺失类的jar。如果gdata-core是用maven构建的(因为现在最严重的java库),从<dependencies>
的{{1}}部分很容易看出哪些依赖项被声明为pom.xml
,因此找出这种类似路径问题的可能性。不幸的是,这个特殊的库仍然使用ant构建,因此很难在不读取整个optional
的情况下确定构建类路径,并且“手动”将其计算出来。
答案 1 :(得分:0)
必须找到谷歌提供的 jar文件,其中包含警告(类Credential
)中提到的类,并将其粘贴在sbt使用的lib
目录中。
真的有很多启发式,结果是我获得here并且同样存在here的jar文件google-oauth-client-1.18.0-rc.jar
,在确定错误的源文件之后for,根本不定义该类本身,而是从不同的包com.google.api.client.auth.oauth2
导入它。我想后一个包必须在编译时出现,并且其编译类对于Scala能够使用前jar中包含的类是必要的,至少在涉及Scala时。
不完全确定google的构建系统如何生成所有这些,以及如何确定Scala所需的额外jar所需的注释,但Scala不再缺少缺少的类。
希望有人愿意提供更深入的答案,关于如何确定scala被破坏的类的详细信息,以及如何追溯到我的启发式搜索的位置。