Java 为什么我能';你不能用shell\u exec运行这个jar吗?

Java 为什么我能';你不能用shell\u exec运行这个jar吗?,java,php,jar,shell-exec,Java,Php,Jar,Shell Exec,我已经创建了下面的java类。此类使用Twitter4JavaAPI进行JavaTwitter通信 import twitter4j.*; import twitter4j.auth.AccessToken; import java.util.List; public class SearchTweets { public static String API_Key = new String("xxxxxxxxxxxxxxxxx"); public static Strin

我已经创建了下面的java类。此类使用Twitter4JavaAPI进行JavaTwitter通信

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);
        }
    }
}
导入twitter4j.*;
导入twitter4j.auth.AccessToken;
导入java.util.List;
公共类搜索推文{
公共静态字符串API_Key=新字符串(“XXXXXXXXXXXXXX”);
公共静态字符串API_Secret=新字符串(“XXXXXXXXXXXXXX”);
公共静态字符串访问\ U令牌=新字符串(“XXXXXXXXXXXXXX”);
公共静态字符串访问\u令牌\u秘密=新字符串(“XXXXXXXXXXXXXX”);
公共静态void main(字符串[]args){
Twitter=new TwitterFactory().getInstance();
setOAuthConsumer(API_密钥,API_秘密);
AccessToken AccessToken=新的AccessToken(访问令牌、访问令牌、密码);
setOAuthAccessToken(accessToken);
试一试{
查询=新查询(“paok”);
查询结果;
做{
结果=twitter.search(查询);
List tweets=result.getTweets();
对于(int i=0;i
我已经在eclipse中创建了它。现在我想用php在网站上运行它。我使用shell_exec。首先,我创建了一个简单的java类来进行测试,所有这些都运行正常

在我运行SearchTweets类之后,我不能。我从eclipse导出jar中的项目。但当我去运行它的时候,我从终点站拿这个

itsoum@itsoum-Inspiron-3542:/opt/lampp/htdocs/tweet$java-jar 线程“main”java.lang.NoClassDefFoundError中的ilias.jar异常: twitter4j/TwitterException位于 位于的java.lang.Class.getDeclaredMethods0(本机方法) privateGetDeclaredMethods(Class.java:2625)位于 java.lang.Class.getMethod0(Class.java:2866)位于 java.lang.Class.getMethod(Class.java:1676)位于 位于的sun.launcher.launchelper.getMainMethod(launchelper.java:494) launcher.LaunchHelper.checkAndLoadMain(LaunchHelper.java:486) 原因:java.lang.ClassNotFoundException: twitter4j.TwitterException位于 java.net.URLClassLoader$1.run(URLClassLoader.java:366)位于 java.net.URLClassLoader$1.run(URLClassLoader.java:355)在 java.security.AccessController.doPrivileged(本机方法)位于 java.net.URLClassLoader.findClass(URLClassLoader.java:354)位于 loadClass(ClassLoader.java:425)位于 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)位于 loadClass(ClassLoader.java:358)。。。还有6个


你知道哪里出了问题吗?

你的程序引用了外部库(twitter4j),你需要引用这个外部库来运行你的程序

您有两个选择:

  • 将lib目录中的所有jar文件包含到jar文件的清单中(您可以在那里使用相对路径)
  • 使用-cp指定命令行上的所有内容(包括jar):
    java-cp ilias.jar:SearchTweets.Main

首先感谢您的回答。你能告诉我运行SearchTweets的具体命令行顺序吗?我需要很多twitter4j罐子。我必须从terminal重新编译吗?你不需要重新编译-如果你有很多
jar
文件,你可以用
java-cp-ilias.jar:lib/*.jar SearchTweets.Main将它们全部包含在内,假设你的所有jar文件都在你的项目结构下的lib/文件夹中,那么你怎么看我是否已经将所有jar文件都包含在清单中?manifest究竟是什么?错误:无法找到或加载主类TwitterTest.main,因为它包含有关打包在JAR文件中的文件的信息。如果您的特定库引用了其他jar文件,您可以在其中指明。如果您不太熟悉Jar和清单文件的创建,您可以坚持使用选项2