Intento ejecutar un trabajo simple generado desde Talend Open Studio v5.4.0. Invoca un servicio web y guarda la respuesta en un archivo XML. En mi máquina de desarrollo (Windows 7) todo funciona bien.
En la máquina RHEL, con esta versión de Java:
[root@localhost checkws]# java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)cuando trato de ejecutar mi trabajo me sale:
[root@localhost checkws]# sh checkws_run.sh Exception in thread "main" java.lang.NoClassDefFoundError: routines/system/api/TalendJob at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) Caused by: java.lang.ClassNotFoundException: routines.system.api.TalendJob at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 13 more¿Cómo resolver este problema?
Para resolver este problema (como lo hizo el OP), exporté el trabajo para las plataformas Windows y Linux. Parece ser un error en la exportación de Talend.
En TOS 3.2.2.r33000 exporté solo para Unix y verifiqué "Exportar dependencias"
Talend genera un paquete zip que funciona bien en Windows (usando un archivo bat) y Linux (usando un archivo sh). Los sh tienen todos los archivos lib en classpath.
Si desea cambiar la ruta de lib y agregar dinámicamente todos los archivos jar en su ruta de lib, esta es una forma de hacerlo.
#!/bin/sh cd `dirname $0` path_lib=/path/to/your/lib/directory # include all jars in lib directory to classpath for jar_file in `find $path_lib -name "*.jar"` do classpath="${jar_file}:${classpath}" done # x_y is the version of your job, x_y = 0_1 for the first version of a talend job. java -Xms256M -Xmx1024M -cp ${classpath} projectname.jobname_x_y.jobname --context=Default "$@"