从所需的.class文件间接引用的Eclipse / IVY错误

时间:2012-06-11 22:09:47

标签: java eclipse ivy

我会定期遇到"type [blah] cannot be resolved. It is indirectly referenced from required .class files"错误,并寻求帮助。

我搜索了这个网站和网络,the many similar - sounding questions的所有内容似乎都是通过添加类来解决的类路径。但在这种情况下,我很确定他们已经在类路径上了。

这是一个非常大的元项目的情况。 ProjectOne和ProjectTwo有两个eclipse项目。

两个项目都由构建服务器发布到Ivy存储库,而ProjectTwo的ivy.xml引用了该版本的ProjectOne。但是,我保持常春藤“解析工作空间中的依赖关系”首选项,以便我可以在两个项目中工作,并解析为我修改的类而不是已发布的类。

ProjectOne在我的工作区中编译(与ProjectTwo一样,除了(偶尔)“间接引用所需的.class文件”问题。

结构看起来基本上是这样的:

// ProjectOne
   class Enum { **// I now suspect this name is the problem**
      public static class EnumObjectCache {
      }

// ProjectTwo
   class Bar { **// Occasionally gets error about Enum$EnumObjectcache being unresolvable**
   }

尽管有以下事实:

  1. 这仅影响Eclipse。真正的编译器可以毫无问题地处理这一切
  2. ProjectTwo的ivy.xml文件确实包含对ProjectOne的传递依赖。
  3. ProjectOne出现在工作区中,并成功编译。
  4. 我始终打开“解析工作区中的依赖项”。
  5. 无论事情如何解决,它的工作类Enum(和EnumObjectCache)都应该保持一年以上。
  6. 作为一项实验,我尝试直接将ProjectOne添加到ProjectTwo的类路径中(通过将其定义为必需项目)。没有变化。
  7. 为了使这个更有趣,这个问题不会一直发生,而且只发生在这个非常大的代码库中的几个类中。哦,当它确实发生时,它总是在Enum $ EnumObjectCache上
  8. 一次,团队中的每个开发人员都不会遇到这种情况。
  9. 问题一旦发生,就会持续多次'清理'并重启eclipse,IVY会重新解决。 (虽然我没有做常春藤清洁全部缓存)。

    10。我可以通过从ProjectOne引入另外不必要的Enum导入来“解决”这个问题

  10. 注意:我以前没有尝试清理缓存,因为它的速度很慢(远程缓存是跨大西洋的,而且它是非常大项目):55分钟清理所有缓存并重新启动解决,然后另外20左右重建。

    然而,在全面清理,重新解析和重建之后,我仍然遇到同样的问题。

0 个答案:

没有答案