Encontrar la ruta absoluta de un jar de mi aplicación
21 julio 2008 at 4:12 pm 3 comentarios
Hola, tenía uno de esos problemas tontos de los que uno está seguro que tiene que existir una solución más sencilla o elegante, pero que no encuentra.
Buscaba la ruta absoluta de un jar de mi aplicación para posteriormente leer una propiedad dentro de su descriptor MANIFEST.MF.
El caso es que a través del ClassLoader se puede localizar un recurso dentro del classpath de nuestra aplicación, pero claro, un jar en sí es parte del classpath pero no está dentro del classpath.
Para solucionar esto, lo que he hecho es localizar una clase en concreto del jar que quiero localizar:
URL url = ClassLoader.getSystemResource("org/apache/commons/pool/BaseObjectPool.class");
Esto nos da una ruta del estilo de:
jar:file:/D:/lib/jakarta-commons/commons-pool-1.2.jar!/org/apache/commons/pool/BaseObjectPool.class
Por lo que ahora bastará eliminar las partes sobrantes, el jar: del principio y la referencia a la clase que hemos utilizado para encontrar el jar. Con ello ya tenemos la referencia al jar y podemos leer la propiedad que buscamos del MANIFEST.
String url2 = url.toString().substring(4, url.toString().indexOf("!")); JarFile ficheroJar = new JarFile(new File(new URL(url2).toURI())); String version = (String)ficheroJar.getManifest().getMainAttributes().getValue("Implementation-Version");
Eso es todo. Sólo decir que seguramente existan mejores maneras de hacer esto. Si conoces una o encuentras una mejor, por favor,compártelo con todos mediante un comentario en esta entrada.
3 comentarios Add your own
Deja una respuesta
Trackback this post | Subscribe to the comments via RSS Feed
1.
piterd | 4 septiembre 2008 a las 11:05 am
Hola
La solución que aportas funciona para los .jar que están dentro dentro del pathclass pero para los demás, a los que quiero acceder y que están dentro de paquetes de mi aplicación, no.
No hay manera de poder acceder a ellos.Gracias de todas formas por tu aportación.
Un saludo.
2.
Miguel | 4 septiembre 2008 a las 11:36 am
Hola Piterd, gracias por tu comentario.
Si me describes un poco más tu problema, prometo intentar buscar una solución para completar más la información de la entrada.
Saludos
3.
White_King | 8 enero 2012 a las 12:03 am
intento acceder a un .properties duera de mi jar pero no c como