【问题标题】:Java Classpath IssueJava 类路径问题
【发布时间】:2010-09-10 22:38:47
【问题描述】:

我有两个班级:

MyApplication

库已经编译到 Library.class 中,源代码不再可用。我现在正在尝试从源代码编译 MyApplication。 MyApplication 依赖于库。该库的包名称为 org.myCompany。我尝试将我的类路径设置为以下内容:

set CLASSPATH=C:\java\project\org\myCompany\Library.class;.

它产生了以下 javac 编译器错误消息:

MyApplication.java:33: cannot find symbol
symbol: class Library
location: class MyApplication
          Library theLibrary = new Library();

所以我将类路径更改为:

set CLASSPATH=C:\java\project\;.

产生了完全相同的错误信息。

如何设置我的 Windows 类路径以包含 Library.class 文件?它是否应该指向包含 org\myCompany 子文件夹的文件夹?还是直接指向class文件?还是到包含类文件的文件夹(即使类在包中并且属于子文件夹)?

我在 set 命令之后执行 echo %CLASSPATH% 并且类路径设置正确。我也做了一个 ant build.xml 文件,遇到了同样的问题。事实上, ant -verbose 确认我的类路径设置正确。

【问题讨论】:

  • 您是否导入了Library 类? 找不到符号 afaik 与类路径问题无关。
  • 感谢所有回复的人。问题是双重的:java 代码中缺少 import 语句,并将类路径指向 .class 文件,而不是包含 org/myCompany/Library.class 文件的文件夹。

标签: java windows classpath


【解决方案1】:

首先:强烈建议不要使用 CLASSPATH 环境变量。最好的事情是让你忘记它的存在。使用-cp 命令行开关或类似方法设置类路径。

其次,每个类路径条目都代表类加载器将根据包层次结构开始寻找.class的位置,即它将在任何类路径条目的子文件夹org/myCompany中查找类org.myCompany.Library .

因此,如果

  • 您添加了一个类路径条目C:\java\project\
  • 还有一个类文件C:\java\project\org\myCompany\Library.class
  • 这实际上是包org.myCompany 的一部分(这里大写很重要!)
  • 你的MyApplication 类有一个import org.myCompany.Library;

那么它真的应该工作。

【讨论】:

    【解决方案2】:

    您不能像这样在类路径中添加单个类。您有 3 个解决方案:

    • 将此类添加到其他已编译类的路径中(尊重目录的包命名)
    • 在你的类路径中添加这个类的根目录(在你的例子中是“C:\java\project\”)
    • 将此单个类添加到 jar 中,并将此 jar 添加到类路径中

    对于您的问题,第三个选择更简洁:外部依赖项通常打包到 jar 文件中。

    【讨论】:

      【解决方案3】:

      如果您的 .class 文件不在 jar 文件中,请将您的类路径指向类包所在的父目录,例如,对于类 org.myCompany.Library,将您的 CP 指向包含 org/myCompany 的目录。
      如果您的 .class 文件包含在某个 jar 文件中,请将该 jar 的完整路径添加到您的类路径中。

      【讨论】:

      • 实际上我没有两个类的任何 JAR
      • @David:您可以将 .class 文件添加到 jar 中。主要优点是,如果您将很多类打包到 jar 中,则只需将该 jar 文件添加到类路径。
      【解决方案4】:

      如果您将类文件编译到不同的目录,则类路径需要指向 .class 文件所在的位置。

      set CLASSPATH=C:\java\project\;
      

      假设类文件与 .java 源文件位于同一目录中是正确的。

      【讨论】:

        【解决方案5】:

        Library 定位到您的MyApplication 类所在的同一个根项目是否有问题

        例如,如果:

        c:/project/org/company/MyApplication.class
        

        你能找到Library类到:

        C:/project/org/myCompany/Library.class
        

        请注意,org/myCompanyorg/company 文件夹位于同一文件夹 c:/project/ 下。

        请注意,如果 Library 类仅由您的应用程序使用,则此解决方案适用于您。

        已编辑 Windows命令提示符比较繁琐,设置classpath后请关闭并重新打开命令提示符,这样才能看到新的classpath的值。

        【讨论】:

          【解决方案6】:

          要使类路径起作用,您需要有一个与包层次结构相匹配的文件夹结构。所以如果你的类是org.myCompany.Library,你必须创建一个C:\java\project\org\myCompany的嵌套文件夹结构,并将你的Library类文件放在myCompany文件夹中。然后将类路径设置为C:\java\project\

          【讨论】:

            猜你喜欢
            • 2023-03-11
            • 2010-09-24
            • 1970-01-01
            • 1970-01-01
            • 2017-09-19
            • 1970-01-01
            • 1970-01-01
            • 2011-02-20
            • 2011-02-01
            相关资源
            最近更新 更多