考虑以下java程序:
import computer_package.Computer;
import com.sun.jna.Library;
public class HelloWorld {
public static void main(String[] args) {
Computer computer = new Computer();
System.out.println("Hello, World");
}
}
和以下目录结构:
Rebs-MacBook-Pro:jalint2 rebcabin$ find computer_package/
computer_package/
computer_package//Computer.class
computer_package//Computer.java
其中Computer.java
如下:
package computer_package;
public class Computer {
public Computer() {
System.out.println("Constructor of Computer class.");
}
public void computer_method() {
System.out.println("Power gone! Shut down your PC soon...");
}
}
和另一个只包含jar
个文件的目录:
Rebs-MacBook-Pro:jalint2 rebcabin$ find com
com
com/sun
com/sun/jna
com/sun/jna/jna-4.0.0.jar
com/sun/jna/jna-platform-4.0.0.jar
如果我只注释原始import com.sun.jna;
文件中的HelloWorld.java
行,那么一切正常
Rebs-MacBook-Pro:jalint2 rebcabin$ javac -g HelloWorld.java
Rebs-MacBook-Pro:jalint2 rebcabin$ java HelloWorld
Constructor of Computer class.
Hello, World
Javac和java能够找到类文件./computer_package/Computer.class
,而无需任何进一步的提示或注释或类路径攻击。
现在,如果我恢复import com.sun.jna;
行并仅注释import computer_package.Computer;
行并构造一个new Computer
的行,并按以下方式编译:
Rebs-MacBook-Pro:jalint2 rebcabin$ javac -g -cp "./com/sun/jna/jna-4.0.0.jar" HelloWorld.java
甚至是这样:
Rebs-MacBook-Pro:jalint2 rebcabin$ make
javac -g -cp "./com/sun/jna/jna-4.0.0.jar:./computer_package" HelloWorld.java
然后一切都还不错:
Rebs-MacBook-Pro:jalint2 rebcabin$ java HelloWorld
Hello, World
至少,import com.sun.jna;
行没有抛出编译错误 - 诚然,我不是还使用jna库;我只是想在婴儿步骤中努力实现这一重大成就。
因此,如果我现在小心地取消注释import computer_package;
行以及构造Computer
实例的行,则会在此问题的顶部生成HelloWorld.java
文件,尝试使用两个我的Computer
班级和 jna,所有地狱都破裂了;以前可接受的Computer
课程现在无法访问:
Rebs-MacBook-Pro:jalint2 rebcabin$ make
javac -g -cp "./com/sun/jna/jna-4.0.0.jar:./computer_package" HelloWorld.java
HelloWorld.java:20: error: package computer_package does not exist
import computer_package.Computer;
^
HelloWorld.java:25: error: cannot access Computer
Computer computer = new Computer();
^
bad class file: ./computer_package/Computer.class
class file contains wrong class: computer_package.Computer
Please remove or make sure it appears in the correct subdirectory of the classpath.
2 errors
make: *** [HelloWorld.class] Error 1
我知道这是基本的;我不是一个Java专家,我承认我正试图绕着类路径噩梦世界猜测我的方式;我只使用emacs和bash,避免添加更多不透明抽象层的IDE。
答案 0 :(得分:2)
您需要将类路径指定为包含包的目录,而不是包的类,因此如果您从同一目录运行:
javac -g -cp "./com/sun/jna/jna-4.0.0.jar:./"
请注意,如果未指定类路径,则默认使用当前目录。见http://docs.oracle.com/javase/tutorial/essential/environment/paths.html