2012-02-14 73 views
10

我想了解Eclipse的类路径的文件,特别是,我想知道这一点:了解Eclipse的类路径声明

  1. 是怎样的JRE使用它(即是JVM阅读本xml文件直接,或者是eclipse以某种方式将其馈入其内部编译器)?

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

语境:我有一个奇怪的错误,这是Eclipse是使用一类的“错误”的版本,而我的常春藤/ 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> 
+0

我不相信JVM知道有关Eclipse类路径文件的任何信息。你可以用一个只打印出System.getProperty(“java.class.path”)的主模块敲出一个测试类,它会告诉你所有的复杂引用都被解析为磁盘上的jar文件位置,它们是然后馈入一个正常的JRE类路径。如果你对常青藤的东西有一个模糊的错误,那么你可能想和常青藤Eclipse插件的开发者一起提出它?祝你好运,解决您的问题 – davidfrancis 2012-02-14 12:08:28

回答

10

两个不同的东西:

1)项目的classpath用于编译使用Eclipse Java编译器(EJC)你的代码,因此文件信息传递给EJC。

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

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

+0

感谢您指出“调试,属性”,这就是我正在寻找的。 – 2016-01-09 01:44:56

+0

有什么办法可以在启动配置中手动更改类路径吗?我们的一些依赖项maven项目在src/test/resources源文件夹下有测试资源。 eclipse run命令将把target/test-classes文件夹包含到最终的类路径中,这不是我们想要的。 – Chris 2017-12-01 03:48:03

0

的问题可能是:

这意味着在Eclipse类路径中,你应该有两个不同版本的同一类的(不同版本的两个不同的jar文件)。如果是这样的话,请尝试删除一个。另外在你的eclipse构建路径中有一些名为“Build Order”的地方,你可以在其中指定classpath jar的顺序,尝试改变它。