笔者想学习用dom4j来生成和解析xml文件,在本地文件夹里写了一个java程序,然后将dom4j的jar包放在{JAVA_HOME}\jre\lib\ext目录下,用javac编译了该文件,正常,但是用java命令运行时,报了错误
    Exception in thread "main" java.lang.NoClassDefFoundError: org/dom4j/DocumentHelper
        at TestXML.(TestXML.java:13)
        at TestXML.main(TestXML.java:42)
    Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentHelper
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 2 more
    java代码如下:
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.DocumentHelper;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    import java.io.FileWriter;
    import java.io.File;
    public class TestXML{
        public TestXML(){
        try{
          boolean rtn = false;
          Document document = DocumentHelper.createDocument();
          Element rootElement = document.addElement("root");
          rootElement.addComment("这里是根节点root");
          Element childElement1 = rootElement.addElement("child1");
          childElement1.addAttribute("tilte","childTitle");
          childElement1.addAttribute("publisher","childPublisher");
          Element childElement2 = childElement1.addElement("child2");
          childElement2.addAttribute("level","Intermediate");
          childElement2.addAttribute("date","July-2006");
          Element titleElement = childElement2.addElement("title");
          titleElement.setText("Dom4j create xml schema");
          Element authorElement = childElement2.addElement("author");
          Element firstNameElement = authorElement.addElement("firstname");
          firstNameElement.setText("xiaoyu");
          Element lastNameElement = authorElement.addElement("lastname");
          lastNameElement.setText("li");
      
          OutputFormat format = OutputFormat.createPrettyPrint();
          XMLWriter writer = new XMLWriter(new FileWriter(new File("E:\\test.xml")),format);
          writer.write(document);
          writer.close();
          rtn = true;
       }catch(Exception e){
          e.printStackTrace();
       } 
     }    
    public static void main(String[] args){
        new TestXML();
    }
}

 

关于jdk目录的一些见解_第1张图片

    这是java安装目录下的两个文件夹,JAVA_HOME配置为D:\Program Files\Java\jdk1.6.0_10,首先将生成xml文件的类编译,编译时出现错误:

 

关于jdk目录的一些见解_第2张图片

    很明显,这是由于没有引入第三方类库造成的,现在将dom4j的jar包拷贝至JAVA_HOME\jre\lib\ext下,再次编译,正常通过。使用java命令运行,就出现如下错误

 

关于jdk目录的一些见解_第3张图片

 

    很明显,运行时没有找到第三方类库的包,所以报错,将dom4j的包复制到D:\Program Files\Java\jre6\lib\ext下,运行程序,OK!
    所以对于jdk安装目录下的两个文件夹,jdk和jre,jdk用于开发环境,应该包括程序的编译,如果程序中包含第三方类库,可直接将第三方jar包复制到扩展目录下。而jre用于运行环境,如果程序中包含第三方类库,要运行程序,将第三方jar包复制至扩展目录下,在类加载时,会自动加载该目录下的类库。