了解 Eclipse 类路径声明

Posted

技术标签:

【中文标题】了解 Eclipse 类路径声明【英文标题】:Understanding the Eclipse classpath declarations 【发布时间】:2012-03-05 19:02:35 【问题描述】:

我正在尝试理解 Eclipse 类路径文件,特别是我想知道这个:

    JRE 是如何使用它的(即 JVM 是直接读取这个 xml 文件,还是 eclipse 以某种方式将它输入到它的内部编译器中)?

    当我从 IDE 运行我的类时,如何解析复杂条目(如下面的 ivy 路径)并将其合并到 JVM ClassLoader 中?

上下文:我有一个奇怪的错误,即 eclipse 使用了“错误”版本的类,而我的 ivy / ant 构建使用了正确的版本,因此我想使用 Eclipse 工具来更好地模仿使用的类加载器在我纯粹的构建中。为了做到这一点,我想我必须查看 Eclipse 项目/类路径文件。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="test"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="lib" path="conf"/>
    <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=*"/>
    <classpathentry kind="output" path="build"/>
</classpath>

【问题讨论】:

我不相信 JVM 对 Eclipse 类路径文件一无所知。您可以使用仅打印出 System.getProperty("java.class.path") 的主块来敲开一个测试类 - 这将向您显示所有复杂的引用都只是解析为磁盘上的 jar 文件位置,它们是然后馈入正常的 JRE 类路径。如果您对 Ivy 的东西有一个模糊的错误,那么您可能想向 Ivy Eclipse 插件的开发人员提出它?祝您好运解决您的问题 【参考方案1】:

两个不同的东西:

1) 项目类路径用于使用 Eclipse Java Compiler (ejc) 编译您的代码,因此将文件信息传递给 EJC。

2) 当您创建启动配置时,您实际上是在声明运行应用程序的类路径,默认情况下,该类路径基于您的项目类路径。这个类路径作为参数传递给 JVM,就像您手动执行一样 (java -cp $classpathentries yourmainclass)。如果您想找出启动配置的确切类路径,请在调试模式下启动您的应用程序/类,然后在“调试”视图中,选择您的进程并单击“属性”,您将在其中看到完整的类路径(所有 jars/作为参数传递给 JVM 的目录)

注意:我看不到你的常春藤路径。

【讨论】:

感谢指出“调试,属性”,这就是我要找的。​​span> 有没有办法在启动配置中手动更改类路径?我们的一些依赖 maven 项目在 src/test/resources 源文件夹下有测试资源。 eclipse 运行命令会将 target/test-classes 文件夹包含到最终的类路径中,这不是我们想要的。【参考方案2】:

问题可能是:

这意味着在你的 Eclipse 类路径中,你应该有同一个类的两个不同版本(两个不同版本的不同 jar 文件)。如果是这种情况,请尝试删除一个。同样在您的 Eclipse 构建路径中,有一个名为“构建顺序”的东西,您可以在其中指定类路径 jar 的顺序,尝试更改它。

【讨论】:

以上是关于了解 Eclipse 类路径声明的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse 中设置 EJB 构建类路径

Eclipse:类路径引用的存档不存在

Eclipse 无法识别 Java 项目;类路径问题

带有 Play 框架的 Eclipse 类路径

eclipse定位类所在包的路径

Eclipse - JAR 创建失败“找不到类路径上的类文件或无法访问...”