zoukankan      html  css  js  c++  java
  • 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:mysrccommypackageMyClass.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目录(扩展类) 路径。本参数如果有多个路径,以:分割。

    -bootclasspath bootclasspath

        采用指定的 引导类(boot classes) 进行交叉编译。
        注1:与用户类文件路径一样,本参数如果有多个路径,以:分割。路径可以是目录、JAR存档或ZIP存档。

    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

    -werror

        发生告警时,停止编译。 

    1.3 其他
    -encoding encoding

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

    -Joption

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

    -deprecation

        显示已弃用的成员或类的每次使用或重写的说明。如果没有-deprecation选项,javac将显示使用或重写已弃用的成员或类的源文件的摘要。-deprecation选项是-Xlint:deprecation的简写形式。

     -implicit:[class, none]

        控制javac进行搜索类型(type)时,如果使用源文件,是否把源文件编译成类文件。(参考文尾“Javac搜索类型(type)信息”)

    -version

       打印javac版本相关信息

    -verbose

       使用详细输出,包含加载的每个类、编译的每个源文件的详细信息。

    -parameters

       将构造函数和方法的正式参数名存储在生成的类文件中,以便反射API中的方法java.lang.reflect.Executable.getParameters可以检索到它们。

    -proc: [noneonly]

       控制是否进行注释处理和编译。-proc:none表示不进行注释处理,直接编译。-proc:只做注解处理,不做任何后续编译。

    -processor class1 [,class2,class3...]

      指定要运行的注释处理器的名称。

    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) 进行交叉编译。

    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精简配置文件。

    •     如果使用compact profile特性,则javac编译源代码时无法使用任何不在指定compact profile中的JavaSE API。
    •     可以替代-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: 方法的参数使用不安全相关的告警。

    -Xlint:-name

          禁用指定名字的warnings。

          

    -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参数放到参数文件中,在命令行通过javac命令指定参数文件进行编译。

    参数文件可以包含javac的option选项参数、以及源文件名。文件内的参数可以用空格或换行符分隔。如果文件名包含嵌入的空格,那么将整个文件名放在双引号中。

    参数文件中的文件名是相对于执行javac命令的当前目录的,而不是参数文件的位置。参数文件中的文件名列表不允许出现通配符(*) (如指定*.java)。不支持使用@符号递归解释文件。不支持-J选项。

    如:

        可以创建2个参数文件,options参数文件用于保存javac的option选项、classes参数文件用于保存源文件列表。

        使用   javac @options @classes   编辑即可。

    附:Javac搜索类型(type)信息:

    编译源文件时,编译器需要源文件中使用的、扩展的、继承的所有类、接口的类型(type)信息。这些类型信息并不在命令行指定的源文件中。

    此时,编译器会搜索该类型(type)定义的源文件、或类文件。编译器:

    • 首先在引导类扩展类路径中搜索。
    • 然后在用户类文件 路径(user class path)下搜索。(用户类文件路径默认为当前目录,也可通过CLASSPATH环境变量、或-cp、或-classpath参数指定。)
    • 如果命令行指定了-sourcepath选项,编译器优先从指定的目录中搜索 源文件;否则,编译器从 用户类文件 路径(user class path)同时搜索类文件和源文件。
    • 用户可以通过-bootclasspath、-extdirs选型自定义引导类扩展类路径。
    • 搜索结果,可能包含type定义的类文件、或源文件、或两者皆搜索到。如果两者都找到了,通过-Xperfer类指定使用哪个。如果-Xperfer为newer,编译器使用两个文件中较新的;如果-Xperfer为source,编译器使用源文件。
    • 如果搜索结果指定使用源文件(不论是只找到了源文件,还是通过-Xperfer选项确定使用源文件),编译器都会读取源文件类获取需要的信息。默认情况下,编译器还会编译此源文件。也可以使用-implicit选型配置是否编译源文件,配置为none,编译器不会为此源文件编译生成类文件;配置为class,则编译器会为此源文件编译生成类文件
  • 相关阅读:
    Struts 学习之03Controller(控制器 上)
    解决.netFrameWork1.1中事件丢失
    python中的迭代器(iterable)和迭代对象(iterator), type和isinstance
    如何在快速启动栏添加桌面
    使用WebService构建的C/S代码结构示例
    .NET Framework 中的常见命名空间
    多重委托简单示例一
    匿名方法示例之计算器(委托作为参数和返回值)
    委托与事件示例
    批处理文件入门
  • 原文地址:https://www.cnblogs.com/yickel/p/12516508.html
Copyright © 2011-2022 走看看