2010-06-14 84 views
3

这很烦人。未找到包; javac

我有这样

-lib 
    --some jar files 

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

Main.java进口SomeOtherPackage的目录结构。并且这两个java文件都在lib中使用jar。

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

但它给出错误,找不到Package SomeOtherPackage。它不应该自动实现依赖关系,并建立SomeOtherPackage以及?上述情况下的javac命令和类路径是什么?

感谢

+0

当你说Main进口SomeOtherPackage的输入命令看起来像是'import packageName.SomeOtherPackage'还是它看起来像'Import SomeOtherPackage'? – Pace 2010-06-14 23:13:06

+0

进口SomeOtherPackage – neebz 2010-06-14 23:14:05

+0

对不起,你说得对,它是导入packageName.SomeOtherPackage。 我没有写代码,再次抱歉。 – neebz 2010-06-14 23:24:45

回答

3

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

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

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

如果你想包括JAR文件以及,使用;(或* nix中,该:)的类路径路径分隔符:

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

为了节省时间,重复所有的打字的shell命令,请使用.bat(或* nix a .sh)文件。或者只是一个IDE,如果你已经熟悉java/javac等等。

+0

这是最好的方法。但是,除非将导入行更改为import packageName.SomeOtherPackage;否则它将不起作用。通常,如果两个软件包不能在同一个项目中构建,那么它们应该有不同的根目录。换句话说,你应该有src/packageName和src/SomeOtherPackage,然后把src/packageName和src/SomeOtherPackage放到你的classpath中。如果他们在同一个项目中,那么你应该修改你的导入语句以反映这一点。导入语句应始终是从源代码根开始的绝对路径。 – Pace 2010-06-14 23:22:19

+0

好吧,它的工作。我运行了 javac -cp。; lib/ packageName/Main.java 但它只创建Main.java的.class文件,并且没有对SomeOtherPackage执行任何操作。 正如我在问题中提到的,它不应该找到它自己的依赖关系并创建它们的类吗? – neebz 2010-06-14 23:23:27

+0

我不这么认为。它只会编译给定的.java文件。如果要编译整个项目,可能需要切换到Ant,但有多种方法可以指定多个源文件。 – Pace 2010-06-14 23:27:44

0

您需要的packageName添加到CLASSPATH,因此它可以找到SomeOtherPackage

+0

Ahan,这意味着我需要在CLASSPATH中添加所有子目录/子包。这不是太乏味吗? – neebz 2010-06-14 23:15:07

+0

不,您只需添加包含顶级软件包目录的所有目录即可。由于SomeOtherPackage不是packageName的子包,因此需要直接添加包含SomeOtherPackage的目录。 – 2010-06-14 23:50:24