javac命令

0. javac命令

javac [ options ] [ sourcefiles ] [ classes] [ @argfiles ]

  1. options
    命令行选项。请参阅选项。
  2. sourcefiles
    一个或多个要编译的源文件(例如MyClass.java)。
  3. classes类
    一个或多个要为注释处理的类(例如MyPackage.MyClass)。
  4. @argfiles
    一个或多个列出选项和源文件的文件,该文件内部含有一个或多个要编译的java文件名。该-Joption并不在这些文件中允许的。请参阅命令行参数文件。

1. Standard Options

选项功能
-Akey[=value]传递给注解处理器的选项。这些不是由javac直接解释的,而是可供单个处理器使用的。键应为一个或多个以“.”分隔的标识符
-cp path or -classpath path
-Djava.ext.dirs=directories覆盖已安装扩展的位置。
-Djava.endorsed.dirs=directories覆盖认可标准路径的位置
-deprecation显示对不赞成使用的成员或类的每次使用或覆盖的说明。如果不使用-deprecation,则 javac将显示使用或覆盖不赞成使用的成员或类的源文件的摘要。-deprecation 是-Xlint:deprecation的简写。
-d directory设置类文件的目标目录。该目录必须已经存在;javac不会创建它。如果类是包的一部分,则javac会将类文件放在反映包名称的子目录中,并根据需要创建目录。例如,如果指定 -d C:\ myclasses 且该类被调用com.mypackage.MyClass,则该类文件被调用 C:\myclasses\com\mypackage\MyClass.class。如果未指定-d,则javac会将每个类文件与从其生成源文件的目录放在同一目录中。注意:-d 指定的目录 不会自动添加到您的用户类路径中。
-encoding 编码设置源文件的编码名称,例如EUC-JP and UTF-8。如果未指定-encoding,则使用平台默认转换器
-g生成所有调试信息,包括局部变量。默认性情况下,只生成行号和源文件信息
-g:none不生成任何调试信息
-g:{lines,vars,source}对应生成行号、本地变量、源文件相关信息
-implicit:[class, none]控制隐式加载的源文件的类文件的生成,
-Joption传递option到Java虚拟机(JVM),其中option是Java启动器的参考页上描述的选项之一。例如,-J-Xms48m将启动内存设置为48 MB。option可以是
-nowarn不生成任何编译告警
-proc: {none,only}控制是否完成注解处理和/或编译。-proc:none表示无需注解处理即可进行编译。 -proc:only表示仅完成注解处理,而无需任何后续编译。
-processor class1[,class2,class3…]要运行的注解处理器的名称。这将绕过默认的发现过程。
processorpath path指定在何处查找注释处理器;如果不使用此选项,则将在类路径中搜索处理器。
-s dir定放置生成的源文件的目录。该目录必须已经存在;javac不会创建它。如果类是包的一部分,则编译器会将源文件放在反映包名称的子目录中,并根据需要创建目录。例如,如果您指定 -s C:\ mysrc 且该类被调用 com.mypackage.MyClass,则源文件将放置在中 C:\mysrc\com\mypackage\MyClass.java。
-source release源文件版本号,如1.8
-sourcepath sourcepath详情输出 T包括每个类加载和每个文件编译
-verbose详情输出 。包括每个类加载和每个文件编译
-version打印版本信息
-X显示有关非标准选项的信息并退出。

2. Cross-Compilation Options

默认情况下,将根据javac附带的平台的引导程序类和扩展类来编译类。但是javac还支持交叉编译,即根据不同Java平台实现的引导程序类和扩展类来编译类。交叉编译时使用-bootclasspath和-extdirs很重要;请参见下面的交叉编译示例。

目标 版本
生成针对指定版本的VM的类文件。类文件将在指定的目标和更高版本上运行,但不会在VM的早期版本上运行。有效目标是 1.1 1.2 1.3 1.4 1.5(也是 5)和1.6(也是6)。
-target 的默认值取决于-source的值 :

如果未指定 -source ,则-target的值为 1.6
如果-source为1.2,则-target的值为1.4
如果-source为1.3,则-target的值为1.4
对于-source的所有其他值,-target的值是-source的值。
-bootclasspath引导类 路径
根据指定的引导类集交叉编译。与用户类路径一样,引导类路径条目由分号(;)分隔,并且可以是目录,JAR存档或ZIP存档。
-extdirs 目录

3. Non-Standard Options

4. The -J Option

传递option到Java虚拟机(JVM),其中option是Java启动器的参考页上描述的选项之一。例如,-J-Xms48m将启动内存设置为48 MB。option可以是

5. COMMAND LINE ARGUMENT FILES

为了缩短或简化javac命令行,可以指定一个或多个文件,这些文件本身包含javac命令的参数 (-J选项除外)。这使您可以在任何操作系统上创建任意长度的javac命令。

参数文件可以任意组合包含javac选项和源文件名。文件中的参数可以用空格分隔或换行符分隔。如果文件名包含嵌入式空格,请将整个文件名放在双引号中,然后将每个反斜杠(“My Files\Stuff.java”)都加倍。

参数文件中的文件名是相对于当前目录的,而不是参数文件的位置。这些列表中不允许使用通配符()(例如用于指定.java)。不支持使用’ @ '字符来递归解释文件。-J不支持这些选项,因为它们已传递给启动器,而启动器不支持参数文件。

执行javac时,请使用’ @ ‘前导字符传递每个参数文件的路径和名称。当javac遇到以字符’ @ ’ 开头的参数时,它将把该文件的内容扩展到参数列表中。

6. ANNOTATION PROCESSING

javac为注释处理提供了直接支持,取代了对单独的注释处理工具apt的需求。

用于注释处理器的API在javax.annotation.processing和javax.lang.model 包和子包中定义 。

注释处理概述
除非使用-proc:none选项禁用注释处理,否则编译器将搜索可用的任何注释处理器。可以使用-processorpath选项指定搜索路径。如果未给出,则使用用户类路径。通过 META-INF/services/javax.annotation.processing.Processor 在搜索路径上命名的服务提供商配置文件来定位处理器 。此类文件应包含要使用的任何注释处理器的名称,每行列出一个。或者,可以使用-processor选项显式指定处理器。

在命令行上扫描源文件和类以确定存在哪些注释后,编译器将查询处理器以确定处理器处理的注释。找到匹配项后,将调用处理器。处理器可以“声明”其处理的注释,在这种情况下,无需进一步尝试查找这些注释的任何处理器。声明所有注释后,编译器将不再寻找其他处理器。

如果有任何处理器生成任何新的源文件,则将进行另一轮注释处理:将扫描任何新生成的源文件,并像以前一样处理注释。在之前的回合中调用的任何处理器也将在所有随后的回合中调用。这一直持续到没有新的源文件生成为止。

在没有生成新源文件的回合中,注释处理器将最后一次被调用,使它们有机会完成他们可能需要做的任何工作。最后,除非使用-proc:only 选项,否则编译器将编译原始文件和所有生成的源文件。

隐式加载的源文件
要编译一组源文件,编译器可能需要隐式加载其他源文件。(请参阅搜索类型)。此类文件当前未进行注释处理。默认情况下,如果进行了注释处理并且编译了任何隐式加载的源文件,则编译器将发出警告。有关抑制警告的方法

7. SEARCHING FOR TYPES

在编译源文件时,编译器通常需要有关其定义未出现在命令行上给出的源文件中的类型的信息。编译器需要在源文件中使用,扩展或实现的每个类或接口的类型信息。这包括源文件中未明确提及但通过继承提供信息的类和接口。

例如,当子类java.applet.Applet时,还使用了Applet的祖先类: java.awt.Panel,java.awt.Container, java.awt.Component和java.lang.Object。

当编译器需要类型信息时,它将查找定义该类型的源文件或类文件。编译器首先在引导类和扩展类中搜索类文件,然后在用户类路径(默认情况下为当前目录)中搜索。通过设置CLASSPATH环境变量或使用 -classpath命令行选项来定义用户类路径。(有关详细信息,请参见 设置类路径)。

如果设置-sourcepath选项,则编译器会在指示的路径中搜索源文件;否则,编译器将在用户类路径中搜索类文件和源文件。

您可以使用-bootclasspath和-extdirs选项指定不同的引导程序或扩展类。请参阅 下面的交叉编译选项。

成功的类型搜索可能会产生类文件,源文件或两者。如果两者都找到,则可以使用 -Xprefer选项来指示编译器使用哪个。如果给出了较新的名称,则编译器将使用两个文件中较新的一个。如果源 给定,它将使用源文件。默认值是较新的。

如果类型搜索本身或由于-Xprefer的设置而找到了所需类型的源文件,则编译器将读取源文件以获取所需的信息。另外,默认情况下,它也会编译源文件。您可以使用-implicit选项指定行为。如果没有给出,则不会为源文件生成任何类文件。如果类给出,类文件将源文件来生成。

直到注释处理完成后,编译器才可能发现需要某些类型信息。如果在源文件中找到类型信息,并且未指定-implicit选项,则编译器将发出警告,表明该文件正在编译中,而无需进行注释处理。要禁用警告,请在命令行上指定文件(以便对其进行批注处理),或使用-implicit选项指定是否应为此类源文件生成类文件。

参考

  1. https://www.iteye.com/blog/wb8206656-2231594
  2. oracle官网jdk8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值