Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ejecutar una aplicacion que contiene varios *.jar

Buenas compañeros...

Traigo una duda que no se si es tonta o en verdad es desconocimiento para muchos...

descargue una aplicacion (concretamente http://code.google.com/p/java-remote-control/ ) resulta que la app tiene 3 directorios asi:

bin
-run-jrc-client.bat
-run-jrc-server.bat

config
+plugins
-client.data.xml
-jrc-client.xapp
-jrc-server.xapp
-server.data.xml

lib
-core.jar
-java-remote-control.jar
-js.jar
-open-forum.jar
-xapp.jar

Para windows solo es correr los archivos *.bat y la aplicacion inicia normalmente...aunque me gustaria comprender como funciona este script...

El problema que tengo es que no he conseguido que corra desde linux...En la web indican estos tres pasos:

The process to run the client on a PC running UNIX is as follows

Rename the start.bat file to run-jrc-client.sh
Set the file as executable
Run the run-jrc-client.sh script

pero a simple vista se puede ver que no funciona porque en linux el comando <start> no existe...

He tratado con el comando <java -jar> y <java -cp *.jar> pero no funciona...

Si alguien tiene conocimiento me gustaria que me ilustrara un poco sobre como debo crear el script para arrancar esta app en linux...y una corta explicacion de como funciona esto de ejecutar una app desde varios *.jar

Mil gracias por la atencion....

marzo 12, 2013 | Registered Commenterju4n

Hola ju4n, te comento cómo creo que funciona.
Uno, en una aplicación java puedes tener un jar o un millón de jars, uno de ellos debe contener el main que ejecutará a los demás, estando los demás únicamente en el classpath.
Algo así como:
1) Cuál es la clase que arranca el programa (el main del cual el programa ejecutará).
2) Que jar's forman parte del classpath correspondiente.
Un saludo,

marzo 23, 2013 | Registered Commenterjcarmonaloeches

Ok...eso lo entendi...y la aplicacion trae este *.bat para iniciar en windows

start javaw -classpath ../lib/java-remote-control.jar;../lib/xapp.jar;../lib/open-forum.jar;../lib/core.jar;../lib/js.jar org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient ../config/

donde se ve que el main esta en

org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient

lo que he tratado de hacer, sin exito, es crear un script para arrancarla en linux...

Gracias por la atencion!!!

marzo 25, 2013 | Registered Commenterju4n

Hola ju4n, gracias a ti por participar.
Por favor, prueba el siguiente comando:
java -cp "../lib/java-remote-control.jar;../lib/xapp.jar;../lib/open-forum.jar;../lib/core.jar;../lib/js.jar" org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient ../config/

Asegúrate que tienes instalada la versión de Java en el entorno unix.

Un saludo,
Jaime.

marzo 25, 2013 | Registered Commenterjcarmonaloeches

Nada brother....llevo tiempo tratando de varias formas y no he podido hacer que funcione...

efectivamente como usted indica en el <man java> se explica..

-cp classpath
Specify a list of directories, JAR archives, and ZIP archives to search for class files. Class path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the CLASSPATH environment variable.

If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the current directory (.).

As a special convenience, a class path element containing a basename of * is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR (a java program cannot tell the difference between the two invocations).
For example, if directory foo contains a.jar and b.JAR, then the class path element foo/* is expanded to a A.jar:b.JAR, except that the order of jar files is unspecified. All jar files in the specified directory, even hidden ones, are included in the list. A classpath entry consisting simply of * expands to a list of all the jar files in the current directory. The CLASSPATH environment variable, where defined, will be similarly
expanded. Any classpath wildcard expansion occurs before the Java virtual machine is started -- no Java program will ever see unexpanded wildcards except by querying the environment. For example; by invoking System.getenv("CLASSPATH").

trate asi:
java -cp "../lib/java-remote-control.jar;../lib/xapp.jar;../lib/open-forum.jar;../lib/core.jar;../lib/js.jar" org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient ../config/

asi:
java -cp "../lib/*" org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient ../config/

asi:
java -cp "../lib/*":org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient:../config/

asi:
java -cp "../lib/*" org.one.stone.soup.xapp.application.jrc.client.XappJavaRemoteControlClient "../config/"

en fin....y otras mas variaciones y en algunas tira:

Exception in thread "main" java.lang.NoClassDefFoundError: org/one/stone/soup/xapp/application/jrc/client/XappJavaRemoteControlClient

y en otras, simplemente no reconoce la orden completa

aclaro que ya explore el proyecto y efectivamente la clase que contiene el main pertenece a la ruta anterior...

Gracias por la colaboracion...

marzo 26, 2013 | Registered Commenterju4n