Sto cercando di trovare un percorso per un file jar che si trova nel classpath raw. getRawClasspath restituisce una raccolta di oggetti IClasspathEntry. Posso chiamare getPath su quelli.Eclipse PDE: dato un percorso relativo come /ProjectName/lib/something.jar, come si ottiene un percorso completo del filesystem?
Ma getPath ritorna qualcosa di strano: un IPATH che inizia con il nome del progetto, come:
/ProjectName/lib/something.jar
Qual è il modo giusto per trasformare questo percorso relativo in un full- percorso del sistema operativo qualificato? All'inizio pensavo di poter semplicemente aggiungere il percorso alla radice dell'area di lavoro, ma ciò non funziona poiché ci sono spesso directory intermedie tra lo spazio di lavoro e il progetto.
E più in generale, come faccio a sapere cosa fare con un IPath restituito da un metodo? Sembra che non sappia mai cos'è IPath; relativo al progetto, relativo allo spazio di lavoro, relativo al progetto ma con il nome del progetto come il primo elemento, relativo alla fase della luna ... È tutto sconcertante, e la documentazione non è mai utile - o almeno io non Non so dove guardare.
UPDATE
sono ancora più confuso ora. Il problema è che, quando hai un IClasspathEntry, non è ancora chiaro come risolverlo su un percorso del filesystem.
La risposta che dice "se un percorso inizia con/è un percorso assoluto (relativo allo spazio di lavoro) non è corretto. Il problema è che il metodo getPath su un percorso IClass restituisce una di queste due cose: un percorso che inizia con una barra che è relativa all'area di lavoro, o un IPath che inizia con un/che è un vero percorso del filesystem.Sì, due tipi completamente diversi sono spinti in un tipo.Vieni la variante del filesystem quando il barattolo è al di fuori dell'area di lavoro, e ottieni la variante "assoluta" quando si trova nello spazio di lavoro
Penso che parte della risposta sia che un IPath, di per sé, è solo una stringa di fantasia: devi sapere da dove viene il suo significato. Non porta i dati giusti per essere utile da solo
Quindi qual è il modo giusto per affrontare questo?
che funziona (upvote), ma non risponde alla più ampia questione del "come avrei dovuto noto che "? Per esempio, non dovrebbe essere stata una ricerca sul progetto invece che sullo spazio di lavoro? –
Se il percorso inizia con un '/' significa che è un percorso assoluto (relativo alla radice dello spazio di lavoro). In caso contrario, significa che è un percorso relativo, può essere relativo a qualsiasi contenitore ... È possibile utilizzare IPath.isAbsolute() per sapere se un percorso è un percorso assoluto. Per IProject.getRawClasspath di JDT utilizza sempre il percorso assoluto. – Dollyn
Sto iniziando a pensare che il mio errore fondamentale è nel pensare che i percorsi di Eclipse abbiano qualcosa a che fare con i percorsi del sistema operativo. Il percorso assoluto di eclissi _always_ ha il progetto come primo elemento, indipendentemente dal percorso del file system? Quindi dovrei aspettarmi qualcosa in /Users/james/workspace/someSubDirectory/foo/ProjectX/src/Code.java per avere un percorso assoluto di /ProjectX/src/Code.java? –