2015-09-29 4 views
-1

Я создал класс java ниже. Этот класс использует twitter4java api для связи java-twitter.Почему я не могу запустить эту банку с помощью shell_exec?

import twitter4j.*; 
import twitter4j.auth.AccessToken; 

import java.util.List; 

public class SearchTweets { 

    public static String API_Key = new String("xxxxxxxxxxxxxxxxx"); 
    public static String API_Secret = new String("xxxxxxxxxxxxxxxxx"); 
    public static String Access_Token = new String("xxxxxxxxxxxxxxxxx"); 
    public static String Access_Token_Secret = new String("xxxxxxxxxxxxxxxxx"); 

    public static void main(String[] args) { 

     Twitter twitter = new TwitterFactory().getInstance(); 
     twitter.setOAuthConsumer(API_Key, API_Secret); 
     AccessToken accessToken = new AccessToken(Access_Token, Access_Token_Secret); 
     twitter.setOAuthAccessToken(accessToken); 

     try { 
      Query query = new Query("paok"); 
      QueryResult result; 
      do { 
       result = twitter.search(query); 
       List<Status> tweets = result.getTweets(); 
       for (int i=0 ; i < tweets.size() ; i++) { 
        Status s = tweets.get(i); 
        if (s.getPlace() != null) { 
         System.out.println("@" + s.getUser().getScreenName() + " - " + s.getPlace().getName());      
        } 
       } 
      } while ((query = result.nextQuery()) != null); 
      System.exit(0); 
     } catch (TwitterException te) { 
      te.printStackTrace(); 
      System.out.println("Failed to search tweets: " + te.getMessage()); 
      System.exit(-1); 
     } 
    } 
} 

Я создал его в затмении. Теперь я хочу запустить его на веб-сайте с php. Я использую shell_exec. Сначала я создаю простой класс java для тестирования и все работает нормально.

После того, как я запустил свой класс SearchTweets, и я не могу. Я экспортирую свой проект в банку из затмения. Но когда выходите, я беру это с терминала

[email protected]:/opt/lampp/htdocs/tweet$ java -jar ilias.jar Exception in thread "main" java.lang.NoClassDefFoundError: twitter4j/TwitterException at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2625) at java.lang.Class.getMethod0(Class.java:2866) at java.lang.Class.getMethod(Class.java:1676) at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) Caused by: java.lang.ClassNotFoundException: twitter4j.TwitterException at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 6 more

Любая идея, что пошло не так?

ответ

0

Ваша программа обращается к внешней библиотеке (twitter4j), вам нужно будет ссылаться на этот внешний LIB, чтобы запустить программу

У вас есть два варианта:

  • включает все фляги файлы из Lib каталога в манифест файла банка (вы можете использовать относительные пути там)
  • Укажите все (включая вашу баночку) в командной строке с помощью -cp: java -cp ilias.jar:<path to twitter4j.jar> SearchTweets.Main
+0

Прежде всего я благодарю вас за ответ. Можете ли вы указать конкретный порядок командной строки для запуска моих поисковых систем? Мне нужно много twitter4j банок. Должен ли я перекомпилировать с терминала или нет? –

+0

вам не нужно перекомпилировать - если у вас есть много файлов 'jar', вы можете включить их все с помощью' java -cp ilias.jar: lib/*. Jar SearchTweets.Main', предполагая, что все ваши файлы jar находятся в папке lib/в рамках вашей структуры проекта –

+0

Также как посмотреть, включили ли я все файлы jars в манифест? Что именно проявляется? –

Смежные вопросы