Ho un app J2EE implementato come un file EAR, che a sua volta contiene un file JAR per il codice strato di business (tra cui alcuni EJB) e un file WAR per il codice del livello web. Il file EAR viene distribuito a JBoss 3.2.5, che decomprime i file EAR e WAR, ma non il file JAR (questo non è il problema, è solo FYI).Ottenere il percorso assoluto di un file all'interno di un JAR all'interno di un EAR?
Uno dei file all'interno del file JAR è un modello MS Word il cui percorso assoluto deve essere passato a un codice MS Word nativo (utilizzando Jacob, FWIW).
Il problema è che se provo ad ottenere il file come questo (dal di dentro un po 'di codice nel file JAR):
URL url = getClass().getResource("myTemplate.dot");
File file = new File(url.toURI()); // <= fails!
String absolutePath = file.getAbsolutePath();
// Pass the absolutePath to MS Word to be opened as a document
... poi il costruttore java.io.File
getta l'IllegalArgumentException "URI non è gerarchica ". L'URL e URI entrambi hanno la stessa toString() di uscita, cioè:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
Questa gran parte del percorso è valido sul file system, ma il resto non è (essendo interno al file JAR):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
Qual è il modo più semplice di ottenere il percorso assoluto per questo file?
Quando ho trovato questo problema, la mia prima idea era "sì, forse l'unico modo è quello di scrivere un file temporaneo!". E sorpresa, è l'unico modo! Come può essere che non ci sia modo di gestire un percorso all'interno di un vaso? Se riesci a ottenere lo stream, puoi ottenere il file, in un mondo perfetto. –