【问题标题】:Package not found; javac未找到包裹;爪哇
【发布时间】:2011-03-03 18:17:57
【问题描述】:

这很烦人。

我有这样的目录结构

-lib
   --some jar files

-packageName
   --Main.java
   --SomeOtherPackage
      --SomeOtherJavaClass.java

Main.java 导入SomeOtherPackage。并且两个 java 文件都使用了 lib 中的 jars。

我所做的是在 CLASSPATH 中独立添加 jar 文件。然后运行为: javac packageName/Main.java

但它给出了 Package not found SomeOtherPackage 的错误。它不应该自动实现依赖并构建SomeOtherPackage吗?上述情况的 javac 命令和类路径是什么?

谢谢

【问题讨论】:

  • 当您说 Main 导入 SomeOtherPackage 时,导入命令看起来像...“import packageName.SomeOtherPackage”还是看起来像“import SomeOtherPackage”?
  • 对不起,佩斯,你是对的,它是导入 packageName.SomeOtherPackage。代码不是我写的,再次抱歉。

标签: java javac


【解决方案1】:

通常的做法是将包根添加到类路径中。

如果您已经在包根目录中,请使用-cp .。例如

cd /path/to/all/packages
javac -cp . packageName/Main.java

如果您还想包含 JAR 文件,请使用 ;(或在 *nix 中为 :)作为类路径路径分隔符:

javac -cp .;lib/file.jar packageName/Main.java

为了节省重复输入所有 shell 命令的时间,请使用 .bat(或在 *nix 中使用 .sh)文件。或者如果您已经熟悉 java/javac 等,则只需一个 IDE。

【讨论】:

  • 这是最好的方法。但是,除非您将导入行更改为 import packageName.SomeOtherPackage; 否则它将不起作用通常,如果两个包不在同一个项目中构建,那么它们应该有不同的根目录。换句话说,您应该拥有 src/packageName 和 src/SomeOtherPackage,然后将 src/packageName 和 src/SomeOtherPackage 放入您的类路径中。如果它们在同一个项目中,那么您应该修改您的导入语句以反映这一点。导入语句应始终是从源代码根目录开始的绝对路径。
  • 好的,成功了。我运行了 javac -cp.;lib/ packageName/Main.java 但它只创建了 Main.java 的 .class 文件并且没有对 SomeOtherPackage 做任何事情。正如我在问题中提到的,它不应该自己找到依赖项并创建它们的类吗?
  • 我不这么认为。它只会编译给定的 .java 文件。如果您想编译整个项目,可能是时候切换到 Ant,但有一些方法可以指定多个源文件。
  • 确实,要编译/构建多个类,不如使用ant之类的工具或Eclipse/IntelliJ/Netbeans之类的IDE。
【解决方案2】:

您需要将 packageName 添加到 CLASSPATH 以便它可以找到 SomeOtherPackage

【讨论】:

  • 阿汗,也就是说我需要在CLASSPATH中添加所有的子目录/子包..是不是有点太繁琐了?
  • 不,你只需要添加所有包含顶级包目录的目录。由于 SomeOtherPackage 不是 packageName 的子包,所以需要直接添加包含 SomeOtherPackage 的目录
猜你喜欢
  • 2018-03-30
  • 2015-03-23
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 2023-04-09
  • 2011-07-21
  • 2017-08-01
  • 2020-05-31
相关资源
最近更新 更多