javac标准工具使用参考

来源:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html

 

javac:读取java类和接口定义,并且编译成字节码和.class文件。还可以处理.java源文件和类中的注释。


javac命令格式:javac [ options ] [ sourcefiles ] [ classes] [ @argfiles ]
   参数顺序没有要求。

   options: 参数选项

   sourcefiles: 需要编译的一个或多个源文件,一般为.java后缀名。如果源文件较少,可以直接在命令行指定文件名。

   @argfiles:  记录源文件列表的文件。如果需要编译的.java源文件数量多,则将源文件名列在一个文件中,文件名之间用空格或回车行分隔。然后在javac命令行中使用该列表文件名,文件名前冠以@字符。

  注1:.java源文件和.class类文件都必须有识别该类的根名。例如,名为MyClass的类将写在名为MyClass.java的源文件中,并被编译为字节码类文件MyClass.class。

  注2:内部类定义产生附加的类文件。这些类文件的名称将内部类和外部类的名称结合在一起,例如MyClass$MyInnerClass.class。

  注3:缺省情况下,编译器将每个类文件、其源文件放在同一目录中。可以使用-d选项指定为类文件指定目录。

 

Option选项:                                                     

包含标准option选项、非标准option选项。

标准option选项,目前的开发环境支持这些标准选项,将来的版本也将支持它;

非标准option选项是目前的虚拟机实现所特有的,将来可能要有变化。非保准option选项以-x开头。

 

1、 标准option选项

1.1、路径类:

-cp path 或 -classpath path

      指定在哪个路径下查找用户类文件路径(user class path)。此参数覆盖环境变量中的CLASSPATH。如果CLASSPATH、-cp、-classpath都没指定,则 用户类文件 路径(user class path)默认为执行命令的当前路径。(搜索过程参考文尾“Javac搜索类型(type)信息”)

  • 如果没有指定-sourcepath选项,还会搜索用户类路径(user class path)来查找源文件。
  • 如果没有指定-processorpath选项。还会搜索用户类路径(user class path)来查找源文件。

-sourcepath path

     指定搜索 类 或 接口 定义的 源文件 路径。(搜索过程参考文尾“Javac搜索类型(type)信息”)

  •    源路径条目在Oracle Solaris上使用冒号(:)分隔,在Windows上使用分号分隔。
  •    源文件路径可以是目录、jar归档、zip归档。如果是包,则目录或归档中的路径名中必须包含包名。
  •    当通过类路径(user class path)找到的类 的源文件也被找到时,这些类可能会被重新编译。

-d directory

    设置编译后.class文件的目录。

  • 这个目录需要已经存在,javac不会创建。
  • 如果未指定-d directory目录,则javac会把编译后的.class文件放在源文件相同的目录中。
  • javac编译后.class文件的存放全部路径是,类目录/包路径/.class文件
  • -d选型指定的路径,不会自动添加到 用户类文件 路径 中(user class path)

-s dir

   指定生成的源文件存放目录。

 

  • 这个目录需要已经存在,javac不会创建。
  • 如果类是包的一部分,那么编译器将源文件放在反映包名的子目录中,并根据需要创建子目录。如:指定-s C:\mysrc,该类名为com.mypackage.MyClass,则源文件放在C:\mysrc\com\mypackage\MyClass.java中。

 

-processorpath path

    指定搜索 注释处理器 路径。如果没有指定本参数,则默认在 用户类文件 路径(user class path)搜索注释处理器。

 

-Djava.ext.dirs=directories

     覆盖已安装扩展的路径(location of installed extensions)

 

-Djava.endorsed.dirs=directories

     覆盖已认可的标准路径(endorsed standards path)

 

-endorseddirs directories

     覆盖已认可的标准路径(endorsed standards path)

 

-extdirs directories

    覆盖 ext目录 路径。本参数如果有多个路径,以:分割。

 

1.2 调试信息类
-g

    产生所有的debugging信息,包含局部变量(local variables)。默认情况下只产生源文件和行号信息。

-g:none

    不产生任何debugging信息。

-g:[kerword list]

    只产生指定类型的debugging信息,这些信息由逗号分隔额关键字列表指定。关键字:

  1. source:源文件debugging信息
  2. lines:行号debugging信息
  3. vars:局部变量(local variables)debugging信息。

-nowarn

    禁用warning信息。作用同-Xline:none

 

1.3 其他
-encoding encoding

    设置源文件编码名称,如EUC-JP、UTF-8。

-Joption

    把参数内容传递给JVM。如-J-Xms48m

-deprecation

    

 

2、 交叉编译选项(Cross-Compilation Options)

默认情况下,类是根据javac附带的平台的引导(bootstrap)和扩展类(extension class)进行编译的。但是,javac也支持交叉编译,即根据不同java平台的引导(bootstrap)和扩展类(extension class)进行编译。在交叉编译时使用-bootclasspath和-extdirs选项非常重要。

-source release
指定编译器可以接受的源代码版本。有效的release值为1.3 1.4 1.5(或5) 1.6(或6) 1.7(或7) 1.8(或8)。如:指定1.3,表示编译器不接受java 1.3版本后引入的断言、泛型等语言特性。

-target version
生成指定JVM版本的类文件。类文件将在指定版本、或更新版本的JVM上运行。有效的version值为1.1 1.2 1.3 1.4 1.5(或5) 1.6(或6) 1.7(或7) 1.8(或8)
-target选项的默认值,依赖与-source选项:
 -source未指定,-target默认值为1.8
 -source为1.2、或1.3,-target默认值为1.4
 -source为1.5、或1.6、或1.7、或1.8,-target默认值为1.8
注:-source非如上值,-target默认值与-source值相同。


-bootclasspath bootclasspath
采用指定的引导类(boot classes)进行交叉编译。
注1:与用户类路径一样,引导类路径条目由冒号(:)分隔,可以是目录、JAR存档或ZIP存档。

3、 精简配置文件选项(Compact Profile Option)
精简配置文件是java 8后提供的能力。采用本特性后,java应用程序不在需要完整的java平台,而是可以以较小的占用空间部署和运行。本特性可以缩短从app store下载应用程序的时间;也使基于JRE的java应用程序部署更加精简,在小型设备上也十分有用。
支持的compact profile为compact1、compact2、compact3。编号大的compact profile包含编号小的compact profile中的所有API。
-profile compact
如:javac –profile compact1 hello.java,表示编译时使用Compact1精简配置文件。
注1:如果使用compact profile特性,则javac编译源代码时无法使用任何不在指定compact profile中的JavaSE API。
注2:替代-profile选项、而使用compact profile文件的另一种方式是:采用-bootclasspath选项指定rt.jar文件的路径,rt.jar指定了compact profile文件的映像。但是此方式没有-profile方式易用,-profile方式不需要在编译系统上提供一个compact profile文件映像。

4、 非标准配置文件选型
-Xbootclasspath/p:path
向引导类(bootstrap class)路径添加后缀(suffix)。

-Xbootclasspath/a:path
向引导类(bootstrap class)路径添加前缀(prefix)。

-Xbootclasspath/:path
覆盖引导类文件(bootstrap class files)路径。

-Xdoclint:[-]group][/access]
启用或禁用特定检查组。其中group可取值:accessibility, syntax, reference, html or missing。

-Xdoclint:none
禁用所有检查组。

-Xdoclint:all[/access]
启动所有检查组。

-Xlint
启动所有建议(recommended)的warnings。当前版本中, 建议(recommended)的warnings包含所有可用的warning(available warnings)。

-Xlint:all
启动所有建议(recommended)的warnings。同-Xlint。

-Xlint:none
禁用所有warnings。

-Xlint:name
启动指定名字的warnings。name可以取如下值:
 cast:不必要的和多余的强制转换类告警。
 calssfile:类文件内容相关问题(issues related to class file contents)的告警。
 deprecation:使用不推荐项相关的告警。比如:java.util.Date.getDay()方法在java 1.1后已不推荐使用,代码中使用了此方法会告警。
 dep-ann: 使用了@deprecated Javadoc comment产生文档,但是没有使用@Deprecated注释时,会报此类告警。
 divzero:代码存在除0的告警。
 empty:代码存在if空语句的告警。
 fallthrough:检查switch case代码块,如case分支中缺少break,导致本case后的case代码块也被执行,会产生本告警。
 finally:try-catch-finally代码块中,finally语句无法正常执行情况下,产生本告警。如:

 options:javac命令行中关于option选型使用问题的告警。
 overrides:类中方法重写相关的告警。
 path:javac命令行中指定的路径无效、或目录不存在产生的告警。
 processing:注释处理器相关的告警。
 rawtypes:对java原始数据类型操作检查告警。
 Serial:序列化class缺少serialVersionUID定义。
 static:static关键字使用相关问题的告警。
 try:try代码块相关问题的告警。
 unchecked:java语言规范约束的未检查通过的类型强制转换告警。
 vargars:方法的参数使用不安全相关的告警。

-Xmaxerrs number
设置打印的最多errors数量

-Xmaxwarns number
设置打印的最多warnings数量

-Xstdout filename
把编译信息输出到指定文件。默认编译信息保存在System.err

-Xprefer:[newer,source]
配置编译器获取类型(type)信息时,是从源文件获取,还是从源文件、类文件中较新的文件获取。(详见:javac搜索type信息过程描述)

-Xpkginfo:[always,legacy,nonempty]
控制javac是否是否根据package-info.java文件生成package-info.class。
 always:
 legacy:仅当package-info.java包含注释(annotations)时产生。
 nonempty:仅当package-info.java包含带有RetentionPolicy.CLASS或RetentionPolicy.RUNTIME的注释时,才产生。

-Xprint
用于调试的目的,打印指定类型(specified types)的文本信息。此过程不编译、不做注释处理。

-XprintProcessorInfo
打印注释处理器申请处理的注释的信息。

-XprintRounds
打印初始和后续注释处理的顺序。

5、 命令行参数文件(Command-Line Argument Files)

Javac搜索类型信息:
编译源文件时,编译器需要源文件中使用的、扩展的、继承的所有类、接口的类型(type)信息。这些类型信息并不在命令行指定的源文件中。
此时,编译器会搜索该类型(type)定义的源文件、或类文件。编译器:
 首先在引导类、扩展类路径中搜索。
 然后在用户类路径(user class path)下搜索。(用户类路径默认为当前目录,也可通过CLASSPATH环境变量、或-cp/-classpath参数指定。)
 如果命令行指定了-sourcepath选项,编译器优先从指定的目录汇总搜索源文件;否则,编译器从用户类路径(user class path)同时搜索类文件和源文件。
 用户可以通过-bootclasspath、-extdirs选型自定义引导类、扩展类路径。
 搜索结果,可能包含type定义的类文件、或源文件、或两者皆搜索到。如果两者都找到了,通过-Xperfer类指定使用哪个。如果-Xperfer为newer,编译器使用两个文件中较新的;如果-Xperfer为source,编译器使用源文件。
 如果搜索结果指定使用源文件(不论是只找到了源文件,还是通过-Xperfer选型决策使用源文件),编译器都会读取源文件类获取需要的信息。默认情况下,编译器还会编译此源文件。也可以使用-implicit选型配置是否编译源文件,配置为none,编译器不会为此源文件编译生成类文件;配置为class,则编译器会为此源文件编译生成类文件

 

上一篇:android studio生成 .so文件,javac 和javah作用,JNI和NDK简单理解,nativeLibraryDirectories=[/data/app-lib/com


下一篇:NotePad++安装及配置