2017-11-12 1 views
0

Ich habe ein Scala-Programm und ich verwende die Intellij IDE. Ich habe ein Glas dieses Programms erstellt und auf den Linux-Server gestellt. Ich habe auch ein Shell-Skript erstellt, um das Programm auszuführen. Jedes Mal, wenn ich das Shell-Skript ausführen, bekomme ich diesen Fehler:Erstellen eines Jar unter Linux Server

java.lang.ClassNotFoundException: com.tac.cco.associations.HDFStoES.main at java.net.URLClassLoader$1.run(URLClassLoader.java:359) at java.net.URLClassLoader$1.run(URLClassLoader.java:348) at java.security.AccessController.doPrivileged(Native Method) at 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) at org.apache.spark.util.Utils$.classForName(Utils.scala:229) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:695) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Hier ist auch mein Shell-Skript

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 

Die Hauptdatei ist das Programm in src/main/scala/com/tac/cco/assoziationen/HDFStoES/main.scala aber es scheint, als ob es es nicht erkennt. Die Manifest-Datei ist unter src/main/META-INF/MANIFEST.MF und enthält folgende Komponenten:

Manifest-Version: 1.0 
Main-Class: com.tac.cco.associations.HDFStoES.main 

Ich verstehe nicht, warum diese Fehlermeldung auftauchen, anstatt das Programm läuft.

Um das Glas zu erstellen, habe ich folgendes gemacht: Ich ging in Projektstruktur -> artificats -> jar -> aus Modulen mit Abhängigkeiten -> Ich wählte dann das ReportingData (Name meines Projekts) Moduls. Habe die com.tac.coc.associations.HDFStoES.main als meine Hauptklasse ausgewählt und dann das Verzeichnis für das Mainfest ausgewählt. Ich habe dann alle Abhängigkeiten außer dem Manifest-Ordner entfernt. Ich habe es dann erstellt, Artefakte gebaut, es zuerst gereinigt und dann gebaut.

+0

, wie Sie die JAR-Datei erstellt haben? – lev

+0

@lev ging ich in die Projektstruktur -> artificats -> jar -> aus Modulen mit Abhängigkeiten -> Ich wählte dann das ReportingData (Name meines Projekts) Moduls. Habe die com.tac.coc.associations.HDFStoES.main als meine Hauptklasse ausgewählt und dann das Verzeichnis für das Mainfest ausgewählt. Ich habe dann alle Abhängigkeiten außer dem Manifest-Ordner entfernt. Ich habe es dann erstellt, Artefakte gebaut, es zuerst gereinigt und dann gebaut. – user2896120

+0

Die Klasse, die Ihre 'main'-Methode enthält, heißt wörtlich" main "? Das sagst du basierend auf dem Manifest, das du geteilt hast. –

Antwort

1

Diese folgende Plugin in Ihrem 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> 
+0

Wo sollte ich diese Datei ablegen? Im Hauptverzeichnis? – user2896120

+0

Dafür erstellen Sie ein neues Maven-Projekt. Danach erhalten Sie eine Datei pom.xml parallel zum src-Ordner. Kopieren und fügen Sie Ihren bestehenden Code ein und Ihr Problem wird gelöst. Wie man ein Maven-Projekt erstellt - http://www.mkyong.com/maven/how-to-create-a-java-project-with-maven/ – Abhimanyu

Verwandte Themen