I try to run simple job generated from Talend Open Studio v5.4.0. It invokes a web service and save responce into an XML file. On my development (Windows 7) machine everything works fine.
On RHEL machine, with this version of 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)
when I try to run my job I get:
[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
How to solve this problem?
To solve this issue (like the OP did) I exported the job both for Windows and Linux platforms. Seems to be a bug in Talend exportation.
On TOS 3.2.2.r33000 I exported for Unix only and checked "Export Dependencies"
Talend generate a zip package which work fine in Windows (using a bat file) and Linux (using a sh file). The sh have all lib jars in classpath.
If you want to change the lib path, and add dynamically all jars in your lib path, this is a way to do that.
#!/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 "$@"