了解 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&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 类路径声明的主要内容,如果未能解决你的问题,请参考以下文章