【问题标题】:Error: java.lang.ClassNotFoundException: org.jdom2.Document ---- java parsing xml on terminal错误:java.lang.ClassNotFoundException:org.jdom2.Document ---- java 在终端上解析 xml
【发布时间】:2018-09-28 00:22:46
【问题描述】:

我正在使用 java 并尝试解析 xml 文档。该代码在 Eclipse 中工作,但是当我尝试在终端上运行它时,我收到了这个错误。 java.lang.ClassNotFoundException: org.jdom2.Document 我使用 org.jdom2.Document 作为可能是问题的数据类型。我不知道可以用什么代替它。

public class ReadXMLFile 
{

  public static org.jdom2.Document Read() 
  {

      String fileName = "test_file.xml";
      org.jdom2.Document jdomDoc = new org.jdom2.Document();
      try 
      {

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(new File(fileName));
        DOMBuilder domBuilder = new DOMBuilder();
        jdomDoc = domBuilder.build(doc);
    } 
    catch (Exception e) 
    {

    }

    return jdomDoc;
  }
}

我的代码示例。

【问题讨论】:

    标签: java xml parsing classnotfoundexception


    【解决方案1】:

    ClassNotFoundException 是一个运行时异常,当应用程序试图在运行时使用 Class.forName() 或 loadClass() 或 findSystemClass() 方法加载一个类,并且在类路径中找不到具有指定名称的类.

    您是否包含在类路径中?你使用哪个命令来构建你的 jar 文件?

    您可以构建您的 java 应用程序,包括以下依赖项:

    <build>
        <plugins>
          <!-- any other plugins -->
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
              </descriptorRefs>
            </configuration>
          </plugin>
        </plugins>
      </build>
    

    有关如何包含依赖项的其他建议,您可以找到 here

    最好的问候,

    【讨论】:

    • javac -cp /Users/Fukes14/Desktop/jdom-2/jdom-2.0.6.jar *.java -d 。这是我用来编译代码的命令。 java term.tg53 这是我用来运行它的命令。线程“main”中的异常 java.lang.NoClassDefFoundError: org/jdom2/Document at term.tg53.main(tg53.java:37) 原因:java.lang.ClassNotFoundException: org.jdom2.Document 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)
    • 试着把你的 jar 文件放在引号之间,比如 javac -cp ".:/Users/Fukes14/Desktop/jdom-2/jdom-2.0.6.jar;" *.java -d
    • java 命令没有任何错误。我把引号放进去,它仍然有效。我的问题是运行它。我的新错误是“错误:无法找到或加载主类 term.tg53”。 tg53 是我程序的主类,term 是所有类所在的文件夹。谢谢你的回答,我真的很感激 Renan。
    • @fukes14,我很乐意提供帮助。您是否尝试过使用 IDE 编译您的应用程序?你的项目在 Github 上吗?
    • 我在 Eclipse 中制作了它,它在那里工作。就在我尝试在终端中运行它时,我得到了这些错误。
    【解决方案2】:

    您的代码失败了,因为执行代码时 JDOM2 不在类路径中。

    有些人建议使用 Maven 作为该问题的解决方案。你实际上并不需要 Maven。 Maven 很有用,因为它可以更轻松地管理您的依赖项,但它是另一层需要学习的技术。您真正需要的是确保 JDOM2 库位于类路径中。

    使用 javac 编译时将 JDOM2 放在类路径中,使用 java 运行时也需要将其放在类路径中,再次使用

    java -cp XXX/jdom-2.0.6.jar myclass
    

    【讨论】:

    • java -cp /Users/Fukes14/Desktop/jdom-2/jdom-2.0.6.jar term.tg53 这是我运行代码的命令。我有类路径,但出现错误:无法找到或加载主类 term.tg53 感谢您的反馈 michael
    • 这一次您在类路径中获得了 JDOM,但您自己的代码不在类路径中。他们都需要。
    • 你能给我一个带有我的代码的示例类路径吗?
    • 使用类路径 /Users/Fukes14/Desktop/jdom-2/jdom-2.0.6.jar:ZZZ 其中 ZZZ 是包含“tg53”类的“term”目录的目录文件。两个目录路径在 Unix 上用冒号分隔,在 Windows 上用分号分隔。
    猜你喜欢
    • 2014-12-30
    • 2010-09-06
    • 2018-01-06
    • 2015-08-02
    • 2013-11-03
    • 2013-04-10
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多