2012-02-14 16 views
10

che sto cercando di capire il file di percorso di classe Eclipse, in particolare, voglio sapere questo:Comprendere le dichiarazioni classpath Eclipse

  1. Come è il JRE usarlo (cioè è la JVM leggendo questo file XML direttamente, o eclipse lo alimenta in qualche modo nel suo compilatore interno)?

  2. In che modo le voci complesse (come il percorso dell'edera in basso) sono state analizzate e incorporate in JVM ClassLoader quando eseguo le mie lezioni dal mio IDE?

Contesto: Ho uno strano bug che è che Eclipse sta usando la versione "sbagliata" di una classe, mentre la mia edera/build formica sta usando la versione corretta, e quindi voglio Eclipse strumento per meglio imita il classloader usato nella mia pura build. Per fare questo, penso che dovrò esaminare i file di progetto/classpath di 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

Non credo che la JVM sappia nulla sul file del percorso di classe Eclipse. Puoi abbattere una classe di test con un blocco principale che stampa semplicemente System.getProperty ("java.class.path") - questo ti mostrerà che tutti i tuoi riferimenti complessi sono solo risolti in percorsi di file jar sul disco, che sono quindi inserito in un normale percorso di classe JRE. Se hai un bug oscuro con la roba di Ivy, allora potresti volerlo sollevare con gli sviluppatori del plugin Ivy Eclipse? Buona fortuna per risolvere il problema – davidfrancis

risposta

10

due cose diverse:

1) Progetto classpath viene utilizzato per compilare il codice utilizzando Eclipse Java Compiler (EJC), quindi le informazioni del file viene passato al EJC.

2) Quando si crea una configurazione di avvio, si sta effettivamente dichiarando il percorso di classe per eseguire l'applicazione, che, per impostazione predefinita, si basa sul percorso di classe del progetto. Questo classpath viene passato come argomento alla JVM come se lo si farebbe manualmente (java -cp $ {classpathentries} yourmainclass). Se vuoi scoprire qual è esattamente il classpath della tua configurazione di lancio, avvia la tua app/classi in modalità di debug e, nella vista Debug, seleziona il tuo processo e fai clic su Proprietà dove vedrai il classpath completo (tutti i vasi/directory passate come argomento alla JVM)

NB: Non riesco a vedere il percorso dell'edera.

+0

Grazie a "Debug, proprietà", questo è quello che sto cercando. –

+0

Esiste un modo per modificare manualmente il classpath nella configurazione di avvio? Alcuni dei nostri progetti di gestione delle dipendenze hanno risorse di test nella cartella sorgente src/test/risorse. Il comando di esecuzione di Eclipse includerà la cartella target/classi di test nel classpath finale, che non è quello che volevamo. – Chris

0

Il problema potrebbe essere:

Significa nel classpath Eclipse, che dovrebbe avere due versioni diverse della stessa classe (due diversi file jar di versione diversa). Se questo è il caso, quindi provare a rimuovere uno. Inoltre nel percorso di costruzione di eclissi esiste qualcosa chiamato "Ordine di compilazione" in cui è possibile specificare l'ordine del jar del classpath provare a cambiarlo.

Problemi correlati