miss2671228
2015-05-15 02:03
采纳率: 100%
浏览 5.6k
已采纳

如何使用java命令调用某个jar文件中的方法?

小弟前段时间制作了一个爬取某个新闻页面的类,并将其制作成了jar包,请问如何动态加载这个r包,请问下步如何实现?求帮助。
源码如下:

 package Test01;

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class Demo2 {
    public static void main(String[] args) {
        URL[] urls = new URL[] {};
         MyClassLoader classLoader = new MyClassLoader(urls, null);
        try {
            classLoader.addJar(new File("E:\\JoImages\\JsoupBaidu\\com.sdzw.test.spider.baidu.jar").toURI().toURL());
            Class<?> testDAO = classLoader.loadClass("com.sdzw.test.dao.TestDAO");
            Method method = testDAO.getDeclaredMethod("RunBaidu");
            method.invoke(null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * URLClassLoader的子类
     * 添加addJar方法
     * @author Administrator
     *
     */
    private static class MyClassLoader extends URLClassLoader {

            public MyClassLoader(URL[] urls) {
                super(urls);
            }

            public MyClassLoader(URL[] urls, ClassLoader parent) {
                super(urls, parent);
            }

            public void addJar(URL url) {
                this.addURL(url);
            }

        }
}

运行结果是这样的:

 java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at Test01.Demo2.main(Demo2.java:16)
Caused by: java.lang.NoClassDefFoundError: org/jsoup/Jsoup
    at com.sdzw.test.dao.TestDAO.RunBaidu(TestDAO.java:15)
    ... 5 more
Caused by: java.lang.ClassNotFoundException: org.jsoup.Jsoup
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 6 more

jar文件的源码是这样的:

 package com.sdzw.test.dao;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class TestDAO {

    public static void RunBaidu(){
        Document doc;
        String url="http://news.baidu.com/";
        BaiduDAO dao =new BaiduDAO();
        try {
            doc=Jsoup.connect(url).timeout(5000).get();
            Elements mon=doc.select("#body a[mon]");
            for(Element e: mon){
                if(e.text().trim().length()>1&&e.attr("mon").length()>1){
                    String linkHref=e.attr("href");
                    String linkText=e.text().trim();
                    if(linkHref.startsWith("http://news.ifeng")){
                        dao.saveFengHuang(linkText, linkHref);
                    }else if(linkHref.indexOf("baijia.baidu.com")!=-1){
                        System.out.println(linkHref);
                        dao.saveBaijia(linkText, linkHref);
                    }else if(linkHref.startsWith("http://news.xinhuanet.com")){
                        dao.savaXinhua(linkText, linkHref);
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

    public static void saveBaijia(String linkText,String linkHref) throws FileNotFoundException, IOException{

        //将标题转换为合法标题
        linkText=LinkTextSafe(linkText);

        //创建一个以标题为名称的txt文档,并将标题存放到文档中
        dao.SaveFile("news/Baijia/"+linkText+".txt", linkText);

        //爬取页面中的指定内容,并将其存入相对应的文件当中
        List<String> getContent = getContent(linkHref,"span.time", "div.article-author-time a", "div.article-detail p");
        for(String content : getContent){
            dao.SaveFile("news/Baijia/"+linkText+".txt", content);
        }

    }
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 逝_去_的_光_阴 2015-05-15 02:27
    已采纳

    你先cmd试试你的jar能不能正常运行,
    怀疑你的jar包是半成品,没有Jsoup的相关文件

    已采纳该答案
    打赏 评论
  • Haber001 2015-05-15 02:18

    你的jar包需要依赖org.jsoup.Jsoup。

    打赏 评论
  • xiaoliu123586 2015-05-15 06:38

    java -jar 文件路径

    打赏 评论
  • itwanghw 2015-05-15 10:50

    错误看来三楼说的对,你jar本来的依赖找不到,load肯定不会成功

    打赏 评论

相关推荐 更多相似问题