Understanding the Eclipse classpath declarations

20,112

Two different things:

1) Project classpath is used to compile your code using Eclipse Java Compiler (ejc), so the file information is passed to the EJC.

2) When you create a launch configuration, you are actually declaring the classpath to run your application, which, by default, is based on your project classpath. This classpath is passed as an argument to the JVM like you would do it manually (java -cp ${classpathentries} yourmainclass). If you want to find out what is precisely the classpath of your launch configuration, launch your app/classes in debug mode, and in the Debug view, select your process and click on Properties where you will see the full classpath (all the jars/directories that are passed as argument to the JVM)

NB: I cannot see your ivy path stuff.

Share:
20,112
jayunit100
Author by

jayunit100

Current: Red Hat BigData, Apache BigTop commiter. Past: Phd in scalable, data driven bioinformatics analytics tools on the JVM, which led me into the world of big data as the genomic data space started to explode. After that, I was with peerindex as a hadoop mapreduce dev, and now I'm a big data engineer at redhat. We're making red hat storage awesome(r). blog: http://jayunit100.blogspot.com. github: http://github.com/jayunit100 pubs : https://www.researchgate.net/profile/Jay_Vyas/publications/?ev=prf_pubs_p2

Updated on October 23, 2020

Comments

  • jayunit100
    jayunit100 over 3 years

    I'm trying to understand the Eclipse classpath file, in particular, I want to know this:

    1. How is the JRE using it (i.e. is the JVM reading this xml file directly, or is eclipse somehow feeding it into its internal compiler)?

    2. How are the complex entries (like the ivy path below) parsed and incorporated into the JVM ClassLoader when I run my classes from my IDE?

    Context: I have a strange bug which is that eclipse is using the "wrong" version of a class, whereas my ivy / ant build is using the correct version, and I thus want to tool Eclipse to better mimick the classloader used in my pure build. In order to do this, I'm thinking I will have to look at the Eclipse project/classpath files.

    <?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>
    
  • Leo Lee
    Leo Lee over 8 years
    Thanks to point out the "debug, properties", this is what I'm looking for.
  • Chris
    Chris over 6 years
    Is there any way to change the classpath manually in the launch configuration? Some of our dependency maven projects have testing resources under src/test/resources source folder. The eclipse run command will include the target/test-classes folder into the final classpath, which is not what We wanted.