欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux下用命令行编译运行Java总结

程序员文章站 2022-06-05 18:03:32
...

最近使用腾讯云的Cloud Studio写Java,只能使用命令行进行编译运行,趁此机会,学习一下Linux的一些常用命令。平时windows下IDE用习惯了,现在用命令行进行编译运行,发现其实问题还是挺多的,所以写下这篇文章。


1.javac命令行

javac用于编译java源文件,生成.class文件。形式如下

javac [option] source

常用的option选项有如下

-classpath <路径>(可以简写成 -cp):指定要使用的类路径或要使用的jar包的路径。

-d <路径>:指定源文件编译后生成的.class文件的存放位置。


2.java命令行

java用于运行生成的.class文件。形式如下

java [option] classname [arguments]

常用的option选项有如下

-classpath <路径>(可以简写成 -cp):指定要使用的类路径或要使用的jar包的路径。

[arguments]:传递给main函数的参数。


3.编译运行一个单独的Java文件

在test文件夹下有一个Test.java文件,结构如下
Linux下用命令行编译运行Java总结
Test.java代码如下

public class Test { 
    public static void main(String[] args) { 
        System.out.println("Hello World!"); 
    }
}

(1)编译生成的.class文件在当前文件夹下

// 编译
javac Test.java
// 运行
java Test
// 输出
Hello World!

(2)也可以指定编译生成的.class文件的路径,比如生成在当前文件夹下的bin文件夹下

// 编译
javac -d ./bin Test.java
// 运行
java -cp ./bin Test
// 输出
Hello World!

当指定生成的目录后,运行时也得指定相应的目录,不然会找不到文件。
Linux下用命令行编译运行Java总结


4.编译运行一个带包的java文件

Linux下用命令行编译运行Java总结
Test.java代码如下

package com.codeliu;
public class Test { 
    public static void main(String[] args) { 
        System.out.println("Hello World!"); 
    } 
}

(1)编译生成的.class文件在当前文件夹下

// 首先得进入到.java文件所在的文件加下,再进行编译
javac Test.java
// 退出到最外层包,再运行,否则找不到文件
java com.codeliu.Test
// 输出
Hello World!

对于在包下的文件,如果编译后直接运行,会找不到文件,必须得退出到最外层包,然后使用完整的包名+文件名进行运行。
Linux下用命令行编译运行Java总结
(2)指定.class文件的生成路径,使用IDE自动编译的时候,我们可以看到源文件一般在src文件夹下,而.class文件在bin文件夹下,这是因为JVM指定了.class文件的路径。

// 编译,生成在与最外层包同级的bin文件夹下,首先退出到最外层包
javac -d ./bin com/codeliu/*
// 运行(windows中把:改成;),-cp表示告诉jvm去该路径下寻找文件
java -cp bin: com.codeliu.Test
// 输出
Hello World!

Linux下用命令行编译运行Java总结


5.同一个包下,一个类调用另一个类

Linux下用命令行编译运行Java总结
在同一个包下有Test01.java和Test02.java,代码如下

package com.codeliu;
public class Test01 { 
    public void print() { 
        System.out.println("I'm Test01"); 
    }
}
package com.codeliu;
public class Test02 { 
    public static void main(String[] args) { 
        Test01 t = new Test01(); t.print(); 
    }
}

因为Test02引用了Test01,所以我们得先编译Test01,再编译Test02。

// 编译Test01.java,生成的.class文件在当前文件夹下,首先得进入到文件所在的文件夹下,然后进行编译
javac Test01.java
// 退出到包的最外层,然后编译Test02.java
javac -cp . com/codeliu/Test02.java
// 运行Test02.java
java com.codeliu.Test02
// 输出
I'm Test01

编译Test02的时候,我们使用-cp告诉编译器在当前路径下(.)去寻找Test01.class。

当然,我们也可以指定.class生成的路径,使用-d即可。
Linux下用命令行编译运行Java总结


6.一个包中的类调用另一个包中的类

文件目录结构如下
Linux下用命令行编译运行Java总结
在package1包下有类Test01.java,package2包下有Test02.java。代码分别如下

package com.package1;
public class Test01 { 
    public void print() { 
        System.out.println("I'm Test01"); 
    }
}
package com.package2;
import com.package1.Test01;
public class Test02 { 
    public static void main(String[] args) { 
        Test01 t = new Test01(); 
        t.print(); 
    }
}

还是同样,得先编译Test01.java。

// 编译Test01.java,指定生成的路径是test文件夹下的bin文件夹下
javac -d ./bin com/package1/*
// 编译Test02.java,-cp告诉编译器去当前文件夹下的bin文件夹下找Test01.class,-d指定生成的路径
javac -cp bin: -d ./bin com/package2/*
// 运行Test02
java -cp bin: com.package2.Test02
// 输出
I'm Test01

Linux下用命令行编译运行Java总结


7.运行一个工程

我们平时的项目肯定不可能是这么简单的,肯定有好多包和以及jar包,这样的情况下,我们使用shell脚本去编译它们。

等下吃完饭举个栗子。



温饱思淫欲,吃饱了我就不想写了。暂时先不写了,俺得学习其他的知识了。

个人网站https://www.codeliu.com,欢迎各位志同道合的盆友!