用惯了IDE,突然发现对于java和javac命令只会基础的单文件编译运行,因此特地研究了一下多文件依赖编译运行。(顺便一提,*真是个好地方)
环境:Java8 Windows10
单文件编译
带包名的java类编译
现在我们对 HelloWorld.java 做些小小的修改代码如下
package lib; public class HelloWorld { public static void main (String []args) { System.out.println ("Hello World!"); } }
这种情况,有两种方式:
第一种就是直接用 -d 参数编译。
编译命令 javac -d . HelloWorld.java 切记 . 代表当前目录左右空格不能丢。编译后编译器会帮我们在当前目录下自动生成一个lib文件夹,这和我们的包名一致。如果包名很长如: com.shark.test 编译器就会生成 ./com/shark/test 三级目录,在最里层即 test目录下就是我们的class文件。
运行命令 java lib.HelloWorld 运行时需带上完整包名+类名
第二种方式是手动创建一个 lib 文件夹将 HelloWorld.java 放进去,(这里的lib 取决于包名,若多层包名需创建多级目录)
编译命令:javac ./lib/HelloWorld.java 运行命令为:java lib.HelloWorld
引用第三方jar包的编译
在这里我引用的是mysql的jar包。代码如下
import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.Driver; public class Test { private ResultSet rset; private static Driver driver; public static void main (String args [] ) throws SQLException { driver = new Driver(); System.out.println ("HelloWorld!!"); System.out.println (driver); } }
编译命令 javac -cp mysql-connector-java-5.1.7-bin.jar Test.java
执行命令 java -Djava.ext.dirs=./ Test 或是 java -cp .;mysql-connector-java-5.1.7-bin.jar Test
有包名:
编译命令 : javac -d . -cp mysql-connector-java-5.1.7-bin.jar Test.java
执行命令 java -Djava.ext.dirs=./ Test
-cp 指定第三方jar包的位置
多文件编译
同级目录下
一下是准备工作,在当前目录下创建 HelloWorld.java 和 Main.java文件内容分别如下
public class HelloWorld { public String getMsg () { return "HelloWorld!"; } }
public class Main { public static void main (String []args) { HelloWorld hw = new HelloWorld (); System.out.println (hw.getMsg ()); } }在cmd中查看目录如下: 同级目录下java和javac都可以自动识别,这里很简单,编译命令为 javac HelloWorld.java Main.java 运行命令为 java Main
非同级目录
import lib.HelloWorld; public class Main { public static void main (String []args) { HelloWorld hw = new HelloWorld (); System.out.println (hw.getMsg ()); } }
package lib; public class HelloWorld { public String getMsg () { return "Hello World!"; } }编译命令 javac Main.java ./lib/HelloWorld.java 运行命令为 java Main
https://*.com/questions/44458126/use-javac-and-java-to-excute-class-file-with-extern-classes-under-other-director