024、package 与 jar

Par @Martin dans le
Tags :

1. 导出 package

包, 即软件包, 可以理解成文件夹.

使用关键字 package 包名 来使用, 如: package test;

// Test.java
package com.test;

class Test {
    // . . .
}

编译方法:

javac -d . Test.java // 点代表当前目录

-d 参数:
该参数的作用是依照包名在指定目录下生成相应的文件夹, 并把生成的目标文件放在该文件夹下.

打包后, 就在当前目录下生成了一个目录树: ./com/test/Test.class, 同时这个类的命名为 “包名”+” . “+”类名”, 即: com.test.Test, 也就是说, 使用 java 命令执行时, 要写成:

java com.test.Test

在非导入的情况下, 调用类的原则如下:(导入的情况见下面一节)

  • 如果两个类在同一个包,调用的时候不需要写全名;
  • 如果两个类不在一个包,调用的时候需要写全名;

包命名规范:

  • 所有字母小写
  • 域名倒过来写,如:com.baidu

2. 导入 package

刚已经知道, 当跨包使用一个类的时候, 要写类的全名,如此太麻烦,可以通过导入包的方法来一次性解决,不再需要写类的全名,就像是在同一个包内一样.

使用 import 关键字,如: import com.test.Test

导入后,在被导入的类中使用导入的类不需要再写全名.

3. 权限总结

权限总结

4. -cp 参数

当我们实际开发时, 常常会建立 classes、src、lib 三个文件夹来建立文件管理.

  • classes, class 目录, 我们编译 *.java 文件生成的 *.class 文件都放在这里
  • src, 源文件目录, 即我们的 *.java 文件
  • lib, jar 包都放这里

当在 src 文件夹下写好源代码后, 通过 -d 参数指定生成的 *.class 文件放在 classes 目录下, 通过 -cp(ClassPath) 参数指定依赖库目录, -cp 可以除了指定目录外还可以指定 jar 包.

如, 现在把刚才的 Test.java 放到 src 目录, 然后重新生成 *.class 文件.

javac -cp classes/;lib/xxx.jar; -d classes/ src/Test.java

5. JAR 包

参考网文: http://blog.chinaunix.net/uid-692788-id-2681136.html

JAR 包是 Java 中所特有一种压缩文档, 它是由 JDK ~\bin\jar.exe 命令生成, 该命令将指定目录下的 package 压缩成 jar 包, 其实就可以把它理解为 .zip 包, 当然也是有区别的, JAR 包中有一个 META-INF\MANIFEST.MF 文件, 当你生成 JAR 包时, 它会自动生成.

C:\Users\Administrator\Desktop>jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

根据上一节所说, 我们的 class 文件都在 classes 目录下, jar 目录生成在 lib 目录下, 所以:

jar cvf lib/test.jar -C classes/ . (<=注意这个点, 这个点是必须的, 而且前面有个空格)