注:
为了便于管理,在当前目录下建立了三个文件夹src、bin以及jar。分别用于存放源文件、字节码文件以及jar包.
简单编译
在路径./src
下有java文件Test1.java
public class Test1 {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
编译
javac -d bin src/Test1.java
运行
cd bin
java Test1
-d 路径
表示将编译好的.class 文件放在该路径下,也可以省略该选项,直接将编译好的文件放在源文所在的文件夹下。
编译带包名的java类
在路径./src/package1/package2
下有java文件TestPackage.java
package package1.package2;
public class TestPackage {
public static void hw() {
System.out.println("Hello World");
}
public static void main(String[] args) {
System.out.println("Hello world");
}
}
编译
javac -d bin src/package1/package2/TestPackage.java
编译成功后会在./bin
目录下生成文件package1/package2/TestPackage.class
运行
cd bin
java package1.package2.TestPackage
打包jar文件
在上一个例子中,在./bin
目录下生成了一个.class
文件,现在将其打包成为jar
文件,方便以后使用。
打包方法
jar cf JAR文件名称 程序文件名称或者程序所在的文件夹
对于前面的例子"TestPackage",使用以下命令打包便于下面的使用
cd bin
jar -cf ../jar/Test.jar package1/
这样在./jar
下会生成一个名为Test.jar的文件
导入外部jar包
在上一个例子中生成了一个jar文件,现在编写一个类来使用该jar包。类的源文件位于./src
中。
import package1.package2.TestPackage;
public class TestJar {
public static void main(String[] args) {
TestPackage.hw();
}
}
编译
javac -classpath jar/Test.jar -d bin/ src/TestJar.java
运行
cd bin
java TestJar
遇到的问题
打包和导包时的问题
我也不知道为什么不可以直接在当前目录下直接使用命令①jar -cf jar/Test.jar bin
或者②jar -cf jar/Test.jar bin/package1
直接打包,而是一定要到./bin
目录下去。当我使用这个命令直接打包的时候,在下面的导包环节中会出现错误:
javac -classpath jar/Test.jar -d bin src/TestJar.java
src/TestJar.java:1: 错误: 程序包package1.package2不存在
import package1.package2.TestPackage;
^
src/TestJar.java:4: 错误: 找不到符号
TestPackage.hw();
^
符号: 变量 TestPackage
位置: 类 TestJar
2 个错误
在使用命令②打包时,为了解决上面的报错,尝试着将TestJar.java文件的第一行改为了import bin.package1.package2;
,但是不但没有解决问题,反而还导致了下面的问题
javac -classpath jar/Test.jar -d bin src/TestJar.java
src/TestJar.java:1: 错误: 无法访问TestPackage
import bin.package1.package2.TestPackage;
^
错误的类文件: /home/***/code/java/spd/jar/Test.jar(/bin/package1/package2/TestPackage.class)
类文件包含错误的类: package1.package2.TestPackage
请删除该文件或确保该文件位于正确的类路径子目录中。
src/TestJar.java:4: 错误: 找不到符号
TestPackage.hw();
^
符号: 变量 TestPackage
位置: 类 TestJar
2 个错误
这到底是为什么我还没搞清楚…