我有一个Scala程序,我正在使用Intellij IDE。我创建了一个这个程序的jar并将它放在Linux服务器上。我还制作了一个shell脚本来执行该程序。每当我运行shell脚本时,我都会收到此错误:
抛出java.lang.ClassNotFoundException: com.tac.cco.associations.HDFStoES.main 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:359) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:348) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:347) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:278) 在org.apache.spark.util.Utils $ .classForName(Utils.scala:229) 在org.apache.spark.deploy.SparkSubmit $ .org $ apache $ spark $ deploy $ SparkSubmit $$ runMain(SparkSubmit.scala:695) 在org.apache.spark.deploy.SparkSubmit $ .doRunMain $ 1(SparkSubmit.scala:187) 在org.apache.spark.deploy.SparkSubmit $ .submit(SparkSubmit.scala:212) 在org.apache.spark.deploy.SparkSubmit $ .main(SparkSubmit.scala:126) 在org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
这也是我的Shell脚本
loader.sh
#!/bin/bash
input_path=/user/content/dashboard/t_date=
#output_path=/user/content/t_orc_content
lib=/apps/cco/lib
midt_date=20170626
jar_file=/apps/cco/ReportingData/bin/ReportingData.jar
input=$input_path$t_date
args="--jars $lib/elasticsearch-spark-20_2.11-5.2.1.jar,$lib/elasticsearch-5.2.1.jar,$lib/kafka-clients-0.9.0.2.3.4.51-1.jar,$lib/config-1.3.1.jar,$lib/DistributedLogger-0.0.2.jar,$lib/argparse4j-0.7.0.jar,$lib/spark-sql_2.11-2.1.0.jar,$lib/spark-core_2.11-2.1.0.jar"
opt="--driver-memory 30g --executor-memory 20g --executor-cores 10 --num-executors 6 --master yarn --conf spark.hadoop.yarn.timeline-service.enabled=false"
/usr/local/spark/bin/spark-submit $opt $args --class com.tac.cco.associations.HDFStoES.main $jar_file $t_date
exit
该程序的主文件位于src / main / scala / com / tac / cco / associations / HDFStoES / main.scala中,但似乎无法识别它。清单文件位于src / main / META-INF / MANIFEST.MF下,包含以下内容:
Manifest-Version: 1.0
Main-Class: com.tac.cco.associations.HDFStoES.main
我不明白为什么会出现此错误消息而不是程序正在运行。
要创建Jar,我执行了以下操作: 我进入了项目结构 - > artificats - > jar - >来自具有依赖关系的模块 - >然后,我选择了ReportingData(我的项目名称)模块。选择com.tac.cco.associations.HDFStoES.main作为我的主类,然后选择mainfest的目录。然后我删除了除manifest文件夹之外的所有依赖项。然后我创建它,去构建工件,先清理它然后构建它。
答案 0 :(得分:1)
在pom.xml中添加以下插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.tac.cco.associations.HDFStoES.main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>