如何编译一个无包结构的单个java文件,无依赖jar包,除了JDK;以及运行该文件?
在任何目录(/home/vc/javacDemo/one
)下新建NoPackageClass.java文件
public class NoPackageClass {
public static void main(String[] args) {
System.out.println("This is no package class!");
System.out.println("java.io.tmpdir property: "+System.getProperty("java.io.tmpdir"));
}
}
进入改目录下执行
javac -encoding UTF-8 ./NoPackageClass.java
编译源文件,只指定了源文件源码格式为UTF-8
运行:java NoPackageClass
,这里运行class文件并不需要加class文件后缀,只要java 命令后跟具有main函数的class文件名即可。
输出:
This is no package class!
java.io.tmpdir property: /tmp
如何编译一个有包结构的java文件, 无依赖jar包,除了JDK; 以及如何运行该文件
在目录/home/vc/javacDemo/two
下创建下面文件,源文件并没有根据package 放置在根据package划分的目录中。
package org.vincent;
public class PackageClass {
public static void main(String[] args) {
System.out.println("This is package class!");
}
}
这个时候因为源文件已经有package 进行管理了,那么需要添加一个参数-d, 用于指定编译后的class 文件存放的基目录,然后javac会根据包结构再生成相应的文件夹 。
当我们在 /home/vc/javacDemo/two
java原代码所在目录下执行javac命令编译源代码时候,-d ./表示以源代码所在目录为class文件的根目录。javac -encoding UTF-8 -d ./ PackageClass.java
最后编译的class 文件所在目录为:/home/vc/javacDemo/two/org/vincent
class文件根目录 + org/vincent
(这个也是包结构)
运行 只能在class 文件根目录下执行,就是我们maven项目熟知的target目录
同时需要执行main方法类所在的全路径名称:java org.vincent.PackageClass
输出:This is package class!
批量编译大量java文件
新增 PackageClassTwo.java 文件
package org.vincent;