这里一个javaproject(KettleDemo1)源代码是在myeclipse8.5开发的,直接指向main方法run 正常。之后卸载了myeclipse8.5安装了myeclipse6.5
在myeclipse6.5中导入已存在的project(KettleDemo1),执行报错如下图:
分析错误信息:
Exception in thread "main" java.lang.NoSuchFieldError: DAYS --(1)java错误
at org.pentaho.di.trans.Trans.waitUntilFinished(Trans.java:1123) --(2)tran错误
at kettle.ExecuteLocalTran.main(ExecuteLocalTran.java:70) --(3)java错误
解决方法:其实按照大家的习惯,直接看第一个错误就可以,但是找不到第一个错误的解决方法的时候往往就要看下面的错误,外部错误第3个是由于第2个错误引起的,但是这里我发现java与kettle集成的包原封不动的拿过来在8.5中是正常的,在6.5中就不正常了吗?所以可以排除这些。那么现在就是第一个的错误了。
带着第1个错误去百度、谷歌找了很多人,类似的Exception in thread "main" java.lang.NoSuchFieldError这样的错误,大家的回答也都是配置文件变量名错误,少包这几种解释,发现是在不靠谱。解决问题之前不要盲目,需要思考;6.5和8.5虽说有区别但是也不至于这么大吧,应该还是环境的问题,那么这里就是java的环境问题了。首先想到了myeclipse的版本问题,于是就看了myeclipse中java的jdk版本。
从上图可以看出来,之前默认的的就是myeclipse6.5自定义的jdk(更换默认在前面打勾),我们点击add,添加一个我们自己的JRE,如下图
点击“OK”
下面重新执行java程序,OK没有问题,这个就是JRE的版本问题了,myeclipse默认的版本一般是比较低级的,这个时候应用我们自己的jre就可以解决这个问题了。