Scala类文件破坏了Java jar的错误

时间:2014-12-19 21:36:31

标签: scala google-api

我遇到了编译错误:

[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>

2 个答案:

答案 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被破坏的类的详细信息,以及如何追溯到我的启发式搜索的位置。