01-eclipse打包运行程序总是报错java.lang.NoClassDefFoundError和ava.lang.ClassNotFoundException(打包原理)

来源:互联网 发布:淘宝袜子网店市场分析 编辑:程序博客网 时间:2024/06/01 10:34

1。今天写了一个程序没有任何错误
这里写图片描述

2。但是运行的时候总是报错
这里写图片描述

3。很郁闷啊。有没有,难道是我打包错误了?下面看看我的打包
这里写图片描述

选择打包内容
这里写图片描述

选择主类
这里写图片描述

上传到服务器
这里写图片描述

运行报错
这里写图片描述

我以为是jar有版本冲突问题,找了半天没找到,因为这个项目是拷贝别人的,别人都能打包运行,为啥我的不行,我注释掉jsonObject这个类,然后再次打包运行还是错,报另外一个;类没找到,很是纳闷。
最后请教大神

真正的打包

首先要有一个/Neo4jBatchInsert3/manifest文件

这里写图片描述

然后查看服务器是否有这些jar包,可以看到我们的jar包都有

这里写图片描述

然后打包
这里写图片描述

这一步要选择manifest文件

这里写图片描述

上传运行
这里写图片描述

这里正常运行了。

我有个疑问,我以前打包,那样也可以直接运行啊,为啥这个不可以?
因为以前你写的代码,里面用的jar都是系统自带的,没有使用外部的jar包。比如你写的java程序,只用了jdk中的类,运行起来当然没问题了,而且你勾选了lib打包,只是打包进去,但是没有使用。
manifest文件却是表示系统使用这个些jar包。

我还有疑问啊。我以前也是服务器运行spark程序,但是也没指定啊,也没报错啊

$SPARK_HOME/bin/spark-submit --name "lcc_sparkSql_submit_com" --master yarn --executor-memory 80G --class sparlsql.hbase.www.second.SparkOnHbaseSecond /home/lcc_work/company_cluster.jar /home/lcc_work/logs/   /home/lcc_work/logs/output

它也正常运行了啊。

那你看看他运行的文件

[root@bigdata03 ~]# cd /opt/hzjs/application/[root@bigdata03 application]# lltotal 75216drwxr-xr-x 2 root root     4096 Oct 31 14:59 importdrwxr-xr-x 2 root root    12288 May 15  2017 lib-rw-r--r-- 1 root root        0 Jun 26 15:09 log.logdrwxr-xr-x 2 root root     4096 Oct 19 11:29 neo4j-rw-r--r-- 1 root root 76905774 Oct 17 10:10 neo4j-community-3.2.0-alpha06-unix.tar.gz-rwxr-xr-x 1 root root      442 Jun  1  2017 run_hc.sh-rwxrwxrwx 1 root root      213 May 15  2017 run_lg.sh-rwxr-xr-x 1 root root      213 May 22  2017 run_mh.sh-rwxr-xr-x 1 root root      215 May 22  2017 run_th.sh-rwxr-xr-x 1 root root      216 May 22  2017 run_tz.sh-rwxr-xr-x 1 root root      443 Jun  1  2017 run_wb.sh-rw-r--r-- 1 root root    62164 May 31  2017 spark2Hbase.jardrwxr-xr-x 2 root root     4096 Oct 16 12:07 www[root@bigdata03 application]# vi run_hc.sh /opt/hzjs/spark/bin/spark-submit \ --jars $(echo /opt/hzjs/application/lib/*.jar | tr ' ' ',') \ --class com.kensure.rel.HCGJRelCalculator \ --master yarn \ --deploy-mode client \ --executor-memory 4G \ --num-executors 1000 \ --executor-cores 4 \ --driver-memory 1G \ --conf spark.default.parallelism=1000 \ --conf spark.storage.memoryFraction=0.5 \ --conf spark.shuffle.memoryFraction=0.3 \ /opt/hzjs/application/spark2Hbase.jar

这里你使用spark-submit提交程序的时候,使用 –jars $(echo /opt/hzjs/application/lib/*.jar | tr ’ ’ ‘,’) \默认的指定了使用的jar包。

总结:只要使用了外部的jar都要设置manifest文件,文件内容需要手写

阅读全文
0 0
原创粉丝点击