style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Obtener la ubicacion del jar

Hola.

Mi pregunta es muy simple, quiza no tanto las respuesta, es por eso que pido ayuda.

Como saber la ubicacion donde tengo mi archivo .jar desde ejecucion?

He visto varios codigo, pero muchos son complicados de entender y de adecuar.

Tenia una forma de hacerlo en Windows, pero si ejecuto ese codigo desde ubuntu, no me daba la misma ruta.

Espero puedan ayudarme!!!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

por qué?

La manera en que funciona el classpath de Java, está pensada precisamente para que no tengas que ubicar el JAR y cosas así. Por qué necesitas encontrar la ubicación del JAR? Tal vez hay algo que está mal planteado en tu problema original y que ahora quieres arreglar encontrando el JAR pero esa no es la solución de fondo...

Ubicacion de archivos

Lo necesito para crear archivos en la misma ubicacion de mis archivos. Ya que en la aplicacion trabajo con archivos, y como me gustaria que fuera portable y no estar teniendo que seleccionar archivos del mismo sistema. por ello requiero de saber en que ubicacion tengo mi programa.

Espero se entienda mi proposito!!!

Imagen de ezamudio

Analiza el classpath

Entonces no te queda más que analizar el classpath y buscar ahí tu jar, ver en qué directorio está y listo. Pero si resulta que la ruta a tu jar es relativa, tienes entonces que encontrar el directorio actual y con eso armar la ruta absoluta. System.getProperty("java.class.path") te da el classpath como una cadena. El separator de los elementos depende de la plataforma: en Windows es punto y coma y en Linux/Mac/etc es dos puntos. Eso lo puedes averiguar con File.pathSeparator. De modo que puedes hacer algo así:

String[] elems = System.getProperty("java.class.path").split(File.pathSeparator);
File aqui = new File(".").getAbsoluteFile();
File mijar = null;
for (String s : elems) {
  if (s.endsWith("mijar.jar")) {
    mijar = new File(aqui, s);
    break;
  }
}
System.out.println("Ruta absoluta a mi jar es %s%n", mijar);

Eso debe funcionarte en Windows/Mac/Linux.

Una funcionalidad que está

Una funcionalidad que está disponible desde el Java 1.2 ( 1999? ) y que yo descubrí apenas hace un año es:

TuClase.class.getProtectionDomain().getCodeSource().getLocation();

Y funciona perfectamente ( aunque después le cambies el nombre al jar )

Acá esta un link donde lo pregunté en otro foro. http://stackoverflow.com/questions/1429172/list-files-inside-a-jar

IDE

Entiendo lo que quieres hacer pero necesito saber en que plataforma estas trabajando (especifica si es en netbeans o en otro)

Mi IDE

Estoy trabajando con NetBeans

Probando

Lo probaré y te comento como me fue. Muchas gracias.

crear java

salu2 miren yo utilizo el jgrasp y no se como crear archivos jar, netbeans ya lo hace automaticament pero jgrasp no, si alguien me puede decir como lo haria en jgrasp
se lo agredeceria mucho, salu2 y gracias

jgrasp se ve muy

jgrasp se ve muy interesante.

No hay información de como hacer el jar ahí, pero es muy fácil desde la linea de comandos. Un jar tiene la misma estructura que un archivo .zip, así que lo único que tienes que hacer es decirle que carpeta quieres incluir.

Si quieres especificar una clase principal, debes de incluir un archivo de manifiesto.

Supongamos que se tiene la siguiente estructura "compilada"

+ - some/name/Hola.class
|
+ - some/name/Adios.class
|
+- org/other/Whaetever.class
|
+- foo/bar/Main.class

Y que la clase principal es "Main.class", entonces hay que crear un archivo ( generalmente llamado manifest.mf , pero puede ser cualquier nombre ) y escribir:

Main-Class: foo.bar.Main

Y luego usar el comando jar con la opcion -cmf ( que significan: create (using ) manifest, (and) file ) y especificar los directorios a incluir; asi:

jar -cmf  manifest.mf  mijar.jar  some  org foo

Que lo que va a hacer es crear el archivo mijar.jar, usando como archivo de manifiesto "manifest.mf" ( para que sepa cual es su clase principal ) y que incluirá los directorios "some" , "org", "foo" y todo su contenido.

Y ya. Se oyé un poco más complicado de lo que es.

Otra opción es usar ant, pero es importante entender primero como funciona esta opción.

Imagen de luxspes

Virtual Ant: Crear tareas de ant para crear jars usando la GUI

Otra opción es usar ant, pero es importante entender primero como funciona esta opción.

Si no te gusta la idea de tener que escribir el XML para crear tus Jar con Ant, siempre puedes comprar Virtual Ant lo que te permitira construir tus ant files en un entorno visual

Imagen de ezamudio

o Gradle

con Gradle ya no usas XML sino un DSL hecho en Groovy. Hay varios proyectos importantes que ya dejaron de lado ant, maven, etc para usar Gradle por la comodidad. Yo todavía sigo con ant y maven en algunos casos pero quiero echarle un ojo para ver qué tal.

Es lo bonito de los DSL's.

Es lo bonito de los DSL's. Mi punto es precisamente entender primero como funcionan las cosas para luego poder ejecutarlas rápidamente con alguna herramienta más "sofisticada" De lo contrario siempre se estará en la tierra de "funciona mágicamente" y de "no quiere, no jala o no funciona".

Imagen de ezamudio

y eso nos distingue

Y eso finalmente es lo que distingue a un hacker de un programador de un geek de un wannabe de un poser: los que dicen "ah funciona mágicamente" o "solito lo hace", en contraste con los que quieren saber cómo funciona y por qué parece que hace algo mágicamente. La curiosidad y la sed de conocimiento, no unos lentes de pasta y una laptop llena de calcomanías con referencias a cultura popular geek.

Por más básico que sea el nivel en el que empiezas, siempre empiezas diciendo "orale, no sé qué hizo esta cosa pero funcionó". En ese momento puedes quedarte ahí muy contento en esa ignorancia o averiguar cómo es que funcionó lo que no entendiste y aprender algo; te vas a topar más adelante con otra cosa que nuevamente funciona y no supiste ni cómo, y así es el camino.

hay alguna diferencia ??

Si mi pryecto esta alojado en un servidor linux ? como me devolveria la direccion, mas especificacmente con que separador "/" o "\",
en windows me devuelve "/".

/

/

Imagen de poloche

Funciona

Esto funciona de maravilla ezamudio lo unico que no termino de entender es por que se usa

File  aqui = new File(".").getAbsoliteFile();

basta con encontrar el path bueno en mi caso basta con el path que ya esta en "s" de ahi recojo la informacion del directorio en el que se esta ejecutando mi jar y bueno asi me funciono gracias.

Imagen de cyberserver

y en JNLP?

Y si estoy trabajando con un jnlp.

¿Cómo podría saber la ruta?. De la forma que comento samudio es eficaz para obtener la ruta de los .jar, pero de un jnlp.

Saludos, espero y puedan ayudarme.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">