我尝试运行从Talend Open Studio v5.4.0生成的简单作业。 它调用Web服务并将响应保存到XML文件中。在我的开发(Windows 7)机器上一切正常。
在RHEL机器上,使用此版本的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)
当我尝试完成我的工作时,我得到了:
[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
如何解决这个问题?
答案 0 :(得分:1)
为了解决这个问题(就像OP那样)我导出了Windows和Linux平台的作业。似乎是Talend出口中的一个错误。
答案 1 :(得分:1)
在TOS 3.2.2.r33000上我只为Unix导出并检查了“导出依赖关系”
答案 2 :(得分:0)
Talend生成一个zip包,可以在Windows(使用bat文件)和Linux(使用sh文件)中正常工作。 sh拥有classpath中的所有lib jar。
如果要更改lib路径,并动态添加lib路径中的所有jar,这是一种方法。
#!/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 "$@"