cmd中使用javac对整个包编译怎么办?对包里面的某几个java文件编译怎么办?

来源:本站 浏览

小编:  可选中1个或多个下面的关键词,搜索相关资料

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部javac的编译单位其实就是单个的java文件,为了达到同时编译多个java文件的目的,可以将所需编译的java文件路径保存在一个txt中,比如sourcelist.txt,以换行为分隔符(这个过程称为类文件注册)。这些java文件没有彼此联系的必要,它们可以是隶属不同的包、在不同的文件夹下(当然建议包路径相同的java类文件放在同一文件路径下),javac命令只会一行一行地读取其中的记录,作为一个单位进行类编译。

  举例说明。假设你的这个包放在src文件夹下,src的父目录为project,sourcelist.txt也事先新建在project文件夹下。首先将这个包中你需要编译的java文件相对于src的路径(如srccomtestTest.java)注册到sourcelist.txt文件中;接着在project文件夹中新建一个bin文件夹(或者class文件夹,命名随你乐意取),用以编译后class文件的放置(这个配以javac命令中-d选项去理解);如果还有其他类库(如jxl.jar或者mysql.jar),建议在project目录下新建一个lib(同样命名不限)文件夹,然后复制到该文件夹下(配以-classpath选项理解);最后检查上述准备工作都完成,win + R、输入cmd都不用讲,现在在cmd中用cd命令切换到project目录,然后输入命令:

  现在就很好理解了。-d选项就是destination的意思,即生成class文件被送到该选项后面的bin文件夹;-classpath就是将你要用到的jar包注册到类加载路径中;-sourcepath就是告诉javac命令去哪里找类文件。

  最后呢,为了方便,可以在project文件夹下新建一个bat文件,并输入以下内容:

  这样每次直接点击即可,而你需要编译其他包的或者其他java文件,直接在sourcelist.txt文件中添加或修改。这其实也是一种“弱耦合”、模块化的表现。已赞过已踩过你对这个回答的评价是?评论收起

  知道合伙人软件行家采纳数:475获赞数:1581qq交流群:208779755 博客:

  ?如果源文件数量多,则将源文件名列在一个文件中,名称间用空格或回车行来进行分隔。然后在 javac 命令行中使用该列表文件名,文件名前冠以 @ 字符。

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

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

  缺省情况下,编译器将每个类文件与其源文件放在同一目录中。可用 -d 选项(请参阅后面的选项)指定其它目标目录。

  工具读取用 Java 编程语言编写的类和接口定义,并将它们编译成字节码类文件。

  当编译源文件时,编译器常常需要它还没有识别出的类型的有关信息。对于源文件中使用、扩展或实现的每个类或接口,编译器都需要其类型信息。这包括在源文件中没有明确提及、但通过继承提供信息的类和接口。

  当编译器需要类型信息时,它将查找定义类型的源文件或类文件。编译器先在自举类及扩展类中查找,然后在用户类路径中查找。用户类路径通过两种途径来定义:通过设置 CLASSPATH 环境变量或使用 -classpath 命令行选项。(有关详细资料,请参阅设置类路径)。如果使用 -sourcepath 选项,则编译器在 sourcepath 指定的路径中查找源文件;否则,编译器将在用户类路径中查找类文件和源文件。可用-bootclasspath 和 -extdirs 选项来指定不同的自举类或扩展类;参阅下面的联编选项。

  成功的类型搜索可能生成类文件、源文件或两者兼有。以下是 javac 对各种情形所进行的处理:

  ?搜索结果只生成源文件而没有类文件: javac 编译源文件并使用由此生成的类文件。

  ?搜索结果既生成源文件又生成类文件: 确定类文件是否过时。若类文件已过时,则 javac 重新编译源文件并使用更新后的类文件。否则, javac 直接使用类文件。

  缺省情况下,只要类文件比源文件旧, javac 就认为它已过时。( -Xdepend 选项指定相对来说较慢但却比较可靠的过程。)

  注意: javac 可以隐式编译一些没有在命令行中提及的源文件。用 -verbose 选项可跟踪自动编译。

  为缩短或简化 javac 命令,可以指定一个或多个每行含有一个文件名的文件。在命令行中,采用 @ 字符加上文件名的方法将它指定为文件列表。当 javac 遇到以 `@ 字符开头的参数时,它对那个文件中所含文件名的操作跟对命令行中文件名的操作是一样的。这使得 Windows 命令行长度不再受限制。

  例如,可以在名为 sourcefiles 的文件中列出所有源文件的名称。该文件可能形如:

  编译器有一批标准选项,目前的开发环境支持这些标准选项,将来的版本也将支持它。还有一批附加的非标准选项是目前的虚拟机实现所特有的,将来可能要有变化。非标准选项以 -X 打头。

  设置用户类路径,它将覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定 CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成。有关详细信息,请参阅设置类路径。

  若未指定 -sourcepath 选项,则将在用户类路径中查找类文件和源文件。

  若未指定 -d 选项,则 javac 将把类文件放到与源文件相同的目录中。

  显示每种不鼓励使用的成员或类的使用或覆盖的说明。没有给出 -deprecation 选项的话, javac 将显示这类源文件的名称:这些源文件使用或覆盖不鼓励使用的成员或类。

  设置源文件编码名称,例如 EUCJIS/SJIS。若未指定 -encoding 选项,则使用平台缺省的转换器。

  只生成某些类型的调试信息,这些类型由逗号分隔的关键字列表所指定。有效的关键字有:

  优化代码以缩短执行时间。使用 -O 选项可能使编译速度下降、生成更大的类文件并使程序难以调试。

  在 JDK 1.2 以前的版本中,javac 的 -g 选项和 -O 选项不能一起使用。在 JDK 1.2 中,可以将 -g 和 -O 选项结合起来,但可能会得到意想不到的结果,如丢失变量或重新定位代码或丢失代码。-O 选项不再自动打开 -depend 或关闭 -g 选项。同样, -O 选项也不再允许进行跨类内嵌。

  指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。

  缺省情况下,类是根据与 javac 一起发行的 JDK 自举类和扩展类来编译。但 javac 也支持联编,在联编中,类是根据其它 Java平台实现的自举类和扩展类来进行编译的。联编时, -bootclasspath 和 -extdirs 的使用很重要;请参阅下面的联编程序示例。

  生成将在指定版本的虚拟机上运行的类文件。缺省情况下生成与 1.1 和 1.2 版本的虚拟机都兼容的类文件。JDK 1.2 中的 javac 所支持的版本有:

  保证所产生的类文件与 1.1 和 1.2 版的虚拟机兼容。这是缺省状态。

  生成的类文件可在 1.2 版的虚拟机上运行,但不能在 1.1 版的虚拟机上运行。

  根据指定的自举类集进行联编。和用户类路径一样,自举类路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。

  根据指定的扩展目录进行联编。目录是以分号分隔的目录列表。在指定目录的每个 JAR 归档文件中查找类文件。

  递归地搜索所有可获得的类,以寻找要重编译的最新源文件。该选项将更可靠地查找需要编译的类,但会使编译进程的速度大为减慢。

  将编译器信息送到System.out 中。缺省情况下,编译器信息送到 System.err 中。

  将选项传给 javac 调用的 java 启动器。例如, -J-Xms48m 将启动内存设为 48 兆字节。虽然它不以 -X 开头,但它并不是 javac 的‘标准选项’。用 -J 将选项传给执行用 Java 编写的应用程序的虚拟机是一种公共约定。

  注意: CLASSPATH 、 -classpath 、 -bootclasspath 和 -extdirs 并 不 指定用于运行 javac 的类。如此滥用编译器的实现通常没有任何意义而且总是很危险的。如果确实需要这样做,可用 -J 选项将选项传给基本的 java 启动器。

  一个源文件 Hello.java ,它定义了一个名叫 greetings.Hello 的类。greetings 目录是源文件和类文件两者的包目录,且它不是当前目录。这让我们可以使用缺省的用户类路径。它也使我们没必要用 -d 选项指定单独的目标目录。

  由于 greetings.Hi 引用了 greetings 包中其它的类,编译器需要找到这些其它的类。上面的示例能运行是因为缺省的用户类路径刚好是含有包目录的目录。但是,假设我们想重新编译该文件并且不关心我们在哪个目录中的线;examples 添加到用户类路径中。可以通过设置 CLASSPATH 达到此目的,但这里我们将使用 -classpath 选项来完成。

  如果再次将 greetings.Hi 改为使用标题实用程序,该实用程序也需要通过用户类路径来进行访问:

  将源文件和类文件置于不同的目录下经常是很有意义的,特别是在大型的项目中。我们用 -d 选项来指明单独的类文件目标位置。由于源文件不在用户类路径中,所以用 -sourcepath 选项来协助编译器查找它们。

  这里我们用 JDK 1.2 的 javac 来编译将在 1.1 版的虚拟机上运行的代码。

  JDK 1.2 javac 在缺省状态下也将根据 1.2 版的自举类来进行编译,因此我们需要告诉 javac 让它根据 JDK 1.1 自举类来进行编译。可用 -bootclasspath 和 -extdirs 选项来达到此目的。不这样做的话,可能会使编译器根据 1.2 版的 API 来进行编译。由于 1.1 版的虚拟机上可能没有该 1.2 版的 API,因此运行时将出错。

当前网址:http://www.sx-news.com/keji/2020-01-12/185402.html

免责声明:本文仅代表作者个人观点,与西部头条网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

你可能喜欢的: