【问题标题】:Different jar file in classpath and buildpath in EclipseEclipse中的类路径和构建路径中的不同jar文件
【发布时间】:2016-09-27 00:39:26
【问题描述】:

我在类路径中添加了Lombok 1.12 jar 文件,而我在库中提供了Lombok 1.16 jar 文件(在 Eclipse 中配置构建路径时)。 Eclipse 无法识别 lombok 的某些注释,例如 @Builder(给出编译器错误)。 (同样@Builder 包含在Lombok 版本1.12 的主包中)

后来我更正了Lombok 1.16 jar 文件也在类路径中。 @Builder 注释这次被 eclipse 识别。现在一切正常。

这意味着将 vm 中的类路径与构建路径进行比较,并检查二进制文件 (lombok.jar) 对于类路径和构建路径是否相同。我的断言正确吗?如果我的解释有误,请纠正我。

【问题讨论】:

  • 在eclipse中,作为代理安装的jar用于代码生成。项目中的 jar 用于在项目中访问注释。代理使用不同的类路径。
  • @RoelSpilker 通过代码生成,您的意思是 jvm 将针对特定 lombok 注释设置的指令保存在一个地方,以便编译器可以从那里获取?

标签: java eclipse classpath buildpath lombok


【解决方案1】:

构建路径是类路径的一种超集,它包含类路径、源代码路径以及依赖于项目的所有资源。如果您有 2 个不同版本的 jar,JVM 将从构建路径中首先出现的 jar 加载类。这可以通过编辑来管理(构建路径->配置构建路径->导出顺序)。如果所需的类在第一个版本中不可用,它将检查第二个版本的 jar 。如果根本找不到它,则会抛出编译错误

【讨论】:

  • 感谢您的回答。你能给我一些你给出的解释的链接,以便我确定吗?
  • 你怎么能说 buildpath 包含 classpath。 Buildpath 和 classpath 是两个完全不同的东西。前者用于特定项目库设置,而后者用于整个 Eclipse 级别(即在 vmargs 中添加类路径)。
  • 从技术上讲,buildpath 不包含类路径 ...buildpath 会累积项目的所有 tge 依赖项。classpath 就是其中之一。
【解决方案2】:

在 Eclipse 中,如果两个 jar 都在构建路径中,则您要引用的那个给它优先顺序,将其置于顶部 - 构建路径最后一个选项卡,或者您可以取消链接您不想引用的较低版本。

【讨论】:

  • 我不会在 buildpath 中给出两个不同的版本。我为构建路径和类路径提供了不同版本的 jar。 Eclipse 显示编译器错误。尽管构建路径仅包含正确的版本。这是包含错误版本的类路径。 @smruti 的答案与我的问题不符。 jvm如何解决这个冲突?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多