我正在尝试理解Eclipse类路径文件,特别是,我想知道这个:
JRE如何使用它(即JVM是直接读取这个xml文件,还是eclipse以某种方式将其提供给内部编译器)?
当我从IDE运行我的类时,如何解析复杂条目(如下面的常春藤路径)并将其合并到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>
答案 0 :(得分:10)
两件事:
1)项目类路径用于使用Eclipse Java Compiler(ejc)编译代码,因此文件信息将传递给EJC。
2)创建启动配置时,实际上是在声明运行应用程序的类路径,默认情况下,它基于项目类路径。此类路径作为参数传递给JVM,就像您手动执行一样(java -cp $ {classpathentries} yourmainclass)。如果要查找启动配置的类路径,请在调试模式下启动app / classes,然后在Debug视图中选择您的进程并单击Properties,您将看到完整的类路径(所有jar /作为参数传递给JVM的目录)
注意:我看不到你的常春藤路径。
答案 1 :(得分:0)
问题可能是:
这意味着在你的eclipse类路径中,你应该有两个不同版本的同一个类(两个不同版本的不同jar文件)。如果是这样,那么尝试删除一个。同样在你的eclipse构建路径中有一些名为&#34; Build Order&#34;您可以在其中指定类路径jar的顺序,尝试更改它。