例子
我写的简单的例子在 bitbucket 上.
Java packages
当初看 Oracal Java Tutorial 的时候一直没搞清楚 package 和文件系统的关系, 以及 CLASSPATH 的意思. 今天特别去看了一下, 做个笔记.
虽然标准没有要求, 不过大部分 Java 的实现都依赖文件系统的树状结构来管理源文件和 class 文件, 比如说, 某个文件内容是
Rectangle.java:
package graphics;
...
那么这个文件应该在 somewhere/graphics/Rectangle.java
javac 可以设定 -d
参数来控制 class 文件输出路径,
使得 class 编译出来不和源文件在一起, 如
p1/sources/com/example/graphics/Rectangle.java
编译出来到 p2/classes/com/example/graphics/Rectangle.class
.
那么 p2/classes
就称为 classpath,
是用来寻找 com.example.graphics.Rectangle
的起始路径.
应该加到 CLASSPATH 中.
javac 和 java 都用 CLASSPATH.
所以如果 p2/classes
在 CLASSPATH 中
并且某个 java 或 class 中有
import com.example.graphics
那么 javac 和 java 会去 p2/classes/com/example/graphics
中找 Rectangle.class 文件.
JAR 操作
操作 | 命令 |
---|---|
创建 jar | jar cf JAR_FILE CLASS_FILES |
检视 jar | jar tf JAR_FILE |
运行 jar | java -jar JAR_FILE |
jar 中除了 class 文件, 还可以包含源文件甚至任意数据.
另外 CLASSPATH 除了上面的 p2/classes 还可以是某个 jar 文件, 这样 java/javac 也会去 jar 文件中寻找.