龙空技术网

Java 9揭秘-创建你的第一个模块(二)

IT民工张大川 75

前言:

目前看官们对“javac选项加原文件”大约比较看重,朋友们都想要分析一些“javac选项加原文件”的相关内容。那么小编同时在网络上收集了一些关于“javac选项加原文件””的相关资讯,希望你们能喜欢,同学们快快来了解一下吧!

编译源代码

使用Java编译器javac命令来编译源代码并将编译的代码保存在C: \Java9Revealed\mods目录下。 javac命令位于JDK_HOME\bin目录中。 以下命令编译源代码。 命令输入是一行,而不是三行:

C:\Java9Revealed>javac -d mods --module-source-path src src\com.jdojo.intro\module-info.java src\com.jdojo.intro\com\jdojo\intro\Welcome.java

注意,运行此命令时,C:\Java9Revealed是当前目录。 -d mods选项告诉Java编译器将所有编译的类文件保存到mods目录下。 注意,正在从C:\Java9revealed目录运行命令,因此命令中的mods目录表示C:\Java9Revealed\mods目录。 如果需要,可以用-d C:\Java9Revealed\mods替换此选项。

第二个选项--module-source-path src指定src目录的子目录包含多个模块的源代码,其中每个子目录名称与包含源代码的子目录的模块名称相同 。 这个选项有一些含义:

在src目录下,必须将模块的源文件保存在子目录下,该目录必须与模块命名相同。

Java编译器将镜像src目录下的目录结构,同时将生成的字节码保存在mods目录中。 也就是说,com.jdojo.intro模块所有生成的字节码将保存在包层次结构为mods\com.jdojo.intro目录中。

如果不指定此选项,生成的字节码将直接放在mods目录下。

javac命令的最后两个参数是源文件 —— 一个是模块声明,一个Welcome类。 如果javac命令成功运行,则在C:\Java9Revealed\mods\com.jdojo.intro目录下生成以下两个类文件:

module-info.class

com\jdojo\intro\Welcome.class

你完成了源代码的编译。

以下命令使用JDK 9之前存在的样式来编译com.jdojo.intro模块的源代码。它仅使用-d选项,该选项指定放置编译的类文件的位置。

C:\Java9Revealed>javac -d mods\com.jdojo.intro src\com.jdojo.intro\module-info.java src\com.jdojo.intro\com\jdojo\intro\Welcome.java

第二个命令的输出与上一个命令的输出是相同的。 但是,如果要在一个命令中编译多个模块的源代码,并将编译的代码放在特定于模块的目录中,则不起作用。

使用javac的--module-version选项,可以指定正在编译的模块的版本。 模块版本保存在module-info.class文件中。 以下命令将生成与上一个命令相同的一组编译文件,还在module-info.class文件中保存了1.0作为模块版本:

C:\Java9Revealed>javac -d mods\com.jdojo.intro --module-version 1.0 src\com.jdojo.intro\module-info.java src\com.jdojo.intro\com\jdojo\intro\Welcome.java

如何确认javac命令在module-info.class中保存了模块版本? 您可以使用javap命令来解析Java字节码。 如果指定了一个module-info.class的路径,那么javap命令会在模块名称之后打印模块的定义,其中包含模块的版本(如果存在)。 如果模块版本存在,则打印的模块名称的格式为moduleName @ moduleVersion。 运行以下命令以验证上一个命令记录的模块名称:

C:\Java9Revealed>javap mods\com.jdojo.intro\module-info.classCompiled from "module-info.java"module com.jdojo.intro@1.0 { requires java.base;}

在JDK 9中增强了jar工具。它允许在创建模块化JAR包时时指定模块版本。

如果要编译多个模块,则需要将每个源文件指定为javac命令的参数。 这里提供一个Windows和UNIX的快捷命令来一次性编译所有的模块。 在Windows中的一行中使用以下命令:

C:\Java9Revealed>FOR /F "tokens=1 delims=" %A in ('dir src\*.java /S /B') do javac -d mods --module-source-path src %A

该命令循环遍历src目录下的所有".java"文件,并一次编译一个Java文件。

如果将命令保存在批处理文件中并运行批处理文件来编译所有源文件,则需要将%A替换为%%A。

该命令的UNIX系统中等价于如下命令:

$ javac -d mods --module-source-path src $(find src -name "*.java")

标签: #javac选项加原文件