Ich versuche, ein lauffähiges Glas aus dieser Java-Bibliothek zu erstellen:Wie java.lang.NoClassDefFoundError beim Exportieren von runnable jar in Intellij IDEA zu beheben?
https://github.com/Jefferson-Henrique/GetOldTweets-java
Einmal mit Eingaben über die Befehlszeile erstellt, soll das Glas der Lage sein, laufen.
Die Hauptdatei ist diese Exporter Klasse:
package me.jhenrique.main;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import me.jhenrique.manager.TweetManager;
import me.jhenrique.manager.TwitterCriteria;
import me.jhenrique.model.Tweet;
public class Exporter {
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
public static void main(String[] args) {
if (args == null || args.length == 0) {
System.err.println("You must pass some parameters. Use \"-h\" to help.");
System.exit(0);
}
if (args.length == 1 && args[0].equals("-h")) {
System.out.println("\nTo use this jar, you can pass the folowing attributes:");
System.out.println(" username: Username of a specific twitter account (without @)");
System.out.println(" since: The lower bound date (yyyy-mm-aa)");
System.out.println(" until: The upper bound date (yyyy-mm-aa)");
System.out.println("querysearch: A query text to be matched");
System.out.println(" maxtweets: The maximum number of tweets to retrieve");
System.out.println("\nExamples:");
System.out.println("# Example 1 - Get tweets by username [barackobama]");
System.out.println("java -jar got.jar username=barackobama maxtweets=1\n");
System.out.println("# Example 2 - Get tweets by query search [europe refugees]");
System.out.println("java -jar got.jar querysearch=\"europe refugees\" maxtweets=1\n");
System.out.println("# Example 3 - Get tweets by username and bound dates [barackobama, '2015-09-10', '2015-09-12']");
System.out.println("java -jar got.jar username=barackobama since=2015-09-10 until=2015-09-12 maxtweets=1");
} else {
TwitterCriteria criteria = TwitterCriteria.create();
for (String parameter : args) {
String[] parameterSplit = parameter.split("=");
if (parameterSplit[0].equals("username")) {
criteria.setUsername(parameterSplit[1]);
} else if (parameterSplit[0].equals("since")) {
criteria.setSince(parameterSplit[1]);
} else if (parameterSplit[0].equals("until")) {
criteria.setUntil(parameterSplit[1]);
} else if (parameterSplit[0].equals("querysearch")) {
criteria.setQuerySearch(parameterSplit[1]);
} else if (parameterSplit[0].equals("maxtweets")) {
criteria.setMaxTweets(Integer.valueOf(parameterSplit[1]));
}
}
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("output_got.csv"));
bw.write("username;date;retweets;favorites;text;geo;mentions;hashtags;id;permalink");
bw.newLine();
System.out.println("Searching... \n");
for (Tweet t : TweetManager.getTweets(criteria)) {
bw.write(String.format("%s;%s;%d;%d;\"%s\";%s;%s;%s;\"%s\";%s", t.getUsername(), sdf.format(t.getDate()), t.getRetweets(), t.getFavorites(), t.getText(), t.getGeo(), t.getMentions(), t.getHashtags(), t.getId(), t.getPermalink()));
bw.newLine();
}
bw.close();
System.out.println("Done. Output file generated \"output_got.csv\".");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Es gibt auch eine TweetManager.java Datei, TwitterCriteria.java Datei und Tweet.java Datei im Ordner src. (Die Main.java-Datei zeigt nur Beispiele dafür, wie Code verwendet werden sollte.) Außerdem befinden sich zwei jars im libs-Ordner für dieses Projekt, "json-20140107.jar" und "jsoup-1.8.1.jar".
Ich mache eine kleine Änderung im Java-Code und ich möchte die got.jar-Datei mit dieser Änderung neu erstellen. Ich benutze Intellij IDEA. Ich habe keine Java-Erfahrung, daher war dieser Prozess bisher ziemlich rätselhaft.
Das Problem (glaube ich) ist, dass, wenn ich das Glas, das ich erstellt habe, das Glas ist nicht in der Lage, die beiden Libs Gläser "json-20140107.jar" und "jsoup-1.8.1.jar" zu finden. Der Ausgang I von Terminal bekommen, ist dies:
main_jar$ java -jar main.jar querysearch="europe refugees" maxtweets=1
Searching...
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/HttpClient
at me.jhenrique.main.Exporter.main(Exporter.java:64)
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.HttpClient
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
die runnable Glas in IntelliJ Bei der Herstellung, I "jar" in der Artefakte Registerkarte ausgewählt, überprüft die "Build auf make" Feld haben "Exporteur", wie mein Haupt Klasse und stellte sicher, dass mein Klassenpfad auf den Ordner mit den Ordnern json und jsoup zeigte. Ich habe auch die json und jsoup Bibliotheken unter "Abhängigkeiten" in der Registerkarte Module aufgeführt. (Diese waren alle Vorschläge aus früheren Antworten auf dieses Problem bezogen.)
Ich habe alle anderen Vorschläge habe ich versucht, zu diesem Thema finden konnte, und nichts hat funktioniert um diesen Fehler zu vermeiden. Was mache ich falsch?
Edit: Gelöst - Problem war ich Maven für zusätzliche Abhängigkeit Downloads zu verwenden, benötigen wurde mir klar, das Problem war, dass ich zusätzliche Abhängigkeiten hatte (neben dem json und jsoup Gläser), die automatisch von Maven heruntergeladen werden mußte, die wasn Es passiert nicht, weil ich das Projekt nicht als Maven-Projekt in Intellij importiert habe. Ich wusste zuerst nicht, was Maven war, aber als ich mir die pom.xml-Datei in dem Code ansah, den ich benutzte, sah ich, dass die Apache-HttpClient-Bibliothek zusätzlich zu den json- und jsoup-Bibliotheken referenziert wurde, und das hatte ich nicht Ein Jar für die HttpClient-Bibliothek.
Sobald ich das Projekt als Maven-Projekt importiert hatte, wurden die zusätzlichen Abhängigkeiten automatisch heruntergeladen und die exportierte JAR-Datei funktionierte wie erwartet. Vielen Dank an Will für eine sehr klare Erklärung, die mir sicherte, dass ich nicht die Bibliotheken importierte, die ich bereits hatte!
hatte ich ein letztes kleines Problem mit Maven und Intellij deren Lösung ich hier, falls jemand anderes bekommt die „kein Haupt Manifest Attribut“ Fehler mit Maven und Intellij: Wrong Manifest.mf in IntelliJ IDEA created .jar
Vielen Dank für den Tipp Olav - Ich endete mit den Abhängigkeiten im Glas, sobald ich mein Problem (das war ich Maven nicht verwenden, um automatisch zusätzliche Abhängigkeiten herunterladen, die ich brauchte). – dimachidy