java 命令行 您所在的位置:网站首页 javac和java java 命令行

java 命令行

2022-12-15 17:28| 来源: 网络整理| 查看: 265

java 命令行有两个常用命令:javac 和 java。

javac 用于编译,java 用于运行。

使用 javac 命令编译

假设命令行的当前工作目录下存在源文件 org/example/Demo.java(其中 org 和 example 为文件夹,Demo.java 为文件 ):

package org.example; public class Demo { public static void main(String[] args) { System.out.println("你好"); } }

使用如下命令编译:

javac org/example/Demo.java

注意:必须带 .java 后缀(只有使用文件全名才能找到这个文件 )。

org/example 目录下就会生成 Demo.class。

如果 Demo.java 就位于当前目录,也可以使用如下命令编译:

javac -d . Demo.java

上述命令会在当前目录下会生成 org/example/ 文件夹,并在 org/example/ 下生成 Demo.class。

如果 Demo.java 位于当前目录,且你使用 javac Demo.java 编译,则你需要手动创建 org/example/ 文件夹,并将编译好的 Demo.class 放到 org/example/ 目录下。

特别说明:编译器会将全部有关系的 .class 文件都编译。例如,Demo.java 中使用了 A.java 中定义的类,那在编译 Demo.java 时,A.java 也会被一同编译。(这种依赖既是编译时依赖,也是运行时依赖

依赖的 jar 包必须使用 -cp (或 -classpath 或 --class-path)选项指明:

javac -cp ".;path/to/.jar" Demo.java

上述代码将当前目录 . 和 path/to/.jar 设为了类路径。

特别说明:Powershell 中用分号分隔两个语句,-cp 后的路径也用分号分隔,为了避免 Powershell 将分号视为分隔符,-cp 后的路径必须用引号括起来。

编译时标明源码:

javac -encoding UTF-8 Demo.java。

编译时指定要在哪个版本的 java 平台上运行:

--source 或 -source 。 可以替换为 7、8、9、10、11、12、13、14、15、16 或 17。

使用 java 命令运行java org.example.Demo

注意:不能带 .class 后缀!文件夹之间用句点,而非斜杠。

如果有参数,用空格隔开。例如,运行下面这个程序:java org.example.Demo a 1 bc 23 。

package org.example; public class Demo { public static void main(String[] args) { for (String s : args) System.out.print(s); } }

命令行会打印出 a1bc23。

编译时如果使用了 -cp 选项,运行时也必须使用 -cp 选项。而且,运行时的 classpath 范围可能更大。例如,Demo.java 引用了 A.jar,A.jar 又引用了 B.jar,则编译时,-cp 只需要指明 A.jar,但运行时,-cp 需要同时指明 A.jar 和 B.jar。(这里的 B.jar 就只是运行时依赖,不是编译时依赖

当引用的 jar 包越来越多时,就需要 Maven 出马了。还是以上面这个例子来介绍整个流程:

使用 mvn install 打包生成 A.jar,并将其安装(安装就是将 A.jar 放入本地仓库,并生成对应的 .pom 文件),此时我们就可以使用 Maven 引入 A.jar 了;使用 Maven 引入 A.jar。因为 A.jar 的 .pom 文件记录了依赖 B.jar,所以 Maven 会自动将 B.jar 加入项目依赖。

有一点要特别说明,mvn package 生成的 .jar 与使用 IDEA 等工具(或 jar 命令)生成的 .jar,两者稍有区别:Maven 生成的 .jar 并不包含它所依赖的 .jar,IDEA 生成的 .jar 包含它所依赖的 .jar 或对这些 .jar 的引用,如下图所示:

使用 Maven 的 shade 插件也可以使生成可编译 jar,详见:Maven 从安装到使用 - 知乎 (zhihu.com)。

当项目比较大时,可能光直接依赖的 jar 包就有很多个。这时可以创建一个空 .jar,给这个空 jar 添加很多依赖,然后我们直接依赖这个空 jar 就可以了。spring-boot-starter-x.x.x.jar 就是一个空 jar,里面只有一个 META-INF 文件夹,没有任何 .class 文件。(也可以称为父项目)

环境变量

java 命令行有一个总的环境变量:JAVA_TOOL_OPTIONS。

推荐新建这个环境变量,并将它的值设为:-Dfile.encoding=UTF-8 -Duser.language=en。其中:

-Dfile.encoding=UTF-8 用于告知 jdk,源码的编码格式是 UTF-8;-Duser.language=en 用于将语言设置为英文。(设置为英文可以一劳永逸的解决全部乱码问题)1. java 命令设置系统变量要加前缀 -D,格式:java -Dproperty=value 。 2. java 的选项分为三类,一类是标准选项,所有 JVM 都支持,如版本号、类路径等;一类是额外选项,仅 Oracle 的 HotSpot JVM 支持,这类选项前面要加一个 -X;还有一类是高级选项,如 Garbage Collection (GC) ,这类选项前面要加一个 -XX。 3. 查看所有系统变量:java -XshowSettings。

设置了 JAVA_TOOL_OPTIONS 后,每次执行命令,都会有如下提示:

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Duser.language=en

另外,IDEA 不建议设置该环境变量,如下图所示。可以忽略该警告,因为我们只设置了 file.encoding 和 user.language,是不会影响性能和稳定性的:

另外,java 命令和 javac 命令也有仅供自己使用的环境变量,分别是 JDK_JAVA_OPTIONS 和JDK_JAVAC_OPTIONS。

java | oracle.com

javac | oracle.com



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有