Java 库和类路径问题

标签 java netbeans classpath

简单的个人背景:几个月前,我被一家公司聘为唯一的 .NET 开发人员(C#),该公司的其他开发人员都是 php 开发人员。入职一周后,我被告知他们想转向 Java,而不是 .NET。这不是一个理想的情况,但我正在努力让它发挥作用。

我认为我不理解项目的库和类路径之间的关系。我使用 NetBeans 6.7.1 进行开发。我当前的项目是创建一个应用程序来更新多个商家来源(eBay、亚马逊等)。我创建了一个类库项目来处理这些更新的安排。我们将其称为更新。

我正在为各种来源(例如 eBay)创建类库项目。我将 ebay 项目作为库添加到更新项目中。在 IDE 中,有一个框显示“在类路径上构建项目”,该框已选中。

最后,现在我有一个小控制台应用程序,它以相同的方式将更新项目引用为库(因此 eBay 项目现在有 2 个库深)。它适用于更新项目中的代码。

在我实例化 eBay 项目中的类(通过控制台应用程序从更新项目)之前,这一切正常。那时我得到了

Exception in thread "main"
java.lang.NoClassDefFoundError

这是

 Caused by: java.lang.ClassNotFoundException
  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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
  at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

这些项目都构建得很好,但这个运行时异常却让我丧命。我不知道我是否真正理解向项目添加库的作用,以及我是否需要做更多的事情来使该类可访问。我已经习惯了能够添加对 DLL 的引用并且一切顺利。我不明白为什么我没有收到任何编译器错误或构建错误,但我收到了有关可访问性的运行时错误。我猜类路径是一个缺失的部分,我不太理解,尽管我认为这个问题可能完全与其他东西有关。

最佳答案

我强烈建议阅读《Core Java》第 1 卷和第 2 卷。对于想要了解 Java 语言内部结构(例如类加载器)的 Java 开发人员来说,它们是必读的内容。至少,请阅读有关类加载的内容。

为了回答您的问题,更新项目应该生成 .class 文件或 jar。您需要在类路径中找到从中引用它们的项目的类文件或 jar 的位置。根据您的 IDE,对项目的引用可能只会让您访问源代码以进行编译。

关于Java 库和类路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1724347/

相关文章:

shell - groovy 二进制版本与 groovy-all-jar

java - 如何将多个路径传递给 Java -cp 命令?

java - Java 中的字符串 : equals vs ==

Java web启动权限问题?

java - java ee 6 @Resource注解的使用方法

java - 无法在Java中重命名和删除文件

java - 错误 java.lang.OutOfMemoryError : PermGen space

linux - 在哪里找到卸载文件

带冒号和不带冒号的 Java 类路径 ":"

java - 使用多线程搜索元素数组,而元素未比较两次