javac的命令(-Xbootclasspath、-classpath与-sourcepath等)
当编译源文件时,编译器常常需要识别出类型的有关信息。对于源文件中使用、扩展或实现的每个类或接口,编译器都需要其类型信息。这包括在源文件中没有明确提及、但通过继承提供信息的类和接口。
例如,当扩展 java.applet.Applet 时还要用到 Applet 的祖先类:java.awt.Panel 、 java.awt.Container、 java.awt.Component 和 java.awt.Object。
当编译器需要类型信息时,它将查找定义类型的源文件或类文件。编译器先在自举类及扩展类中查找,然后在用户类路径中查找。

属于Java 平台核心的class,比如java.lang.String等以及rt.jar等重要的核心级别的class。这是由Bootstrap ClassLoader来载入的。一般是放置在{java_home}\jre\lib目录下。
A、BootStrap class扩展方案
(1)-Xbootclasspath: 分隔目录和zip/jar文件。设置搜索路径以引导类和资源。分隔符unix使用:号,windows使用;
注意,如果用这个参数,不用下面的/a或者/p的话,就只会从这里指定的目录和文件里加载了,就不会到{java_home}\jre\lib下加载核心类库了
(2)-Xbootclasspath/a: 后缀在核心class搜索路径后面,常用。unix使用:号,windows使用来分隔目录和zip/jar文件
(3)-Xbootclasspath/p: 前缀在核心class搜索路径前面.不常用。
如:
System.getProperty("sun.boot.class.path")
输出如下:
C:\Program Files\Java\jdk1.7.0_75\jre\lib\resources.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\lib\rt.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\lib\sunrsasign.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\lib\jsse.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\lib\jce.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\lib\charsets.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\lib\jfr.jar;
C:\Program Files\Java\jdk1.7.0_75\jre\classes
B、Extension class 扩展方案
Java extend class 存放在{Java_home}\jre\lib\ext目录下。当调用Java时,对扩展class路径的搜索是自动的,总会搜索的。
其ext目录下的jar如下:
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\access-bridge-64.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\dnsns.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\jaccess.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\localedata.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunec.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_provider.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunmscapi.jar
C:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\zipfs.jar
(1)-Djava.ext.dirs= 覆盖Java本身的ext设置。-D 是设置系统的属性
java.ext.dirs指定的目录由Extension ClassLoader加载器加载。如果程序没有指定该系统属性,那么该加载器默认加载$JAVA_HOME/jre/lib/ext目录下的所有jar文件。但如果指定系统属性且忘了把$JAVA_HOME/jre/lib/ext路径给加上,那么Extension ClassLoader不会去加载$JAVA_HOME/lib/ext下面的jar文件,这意味着将失去一些功能,例如java自带的加解密算法实现。
(2)-endorseddirs
这样基于这个JDK的所有的ArrayList都改变了!!!
例如:
String s = System.getProperty("java.endorsed.dirs");
System.out.println(s); // C:\Program Files\Java\jdk1.7.0_75\jre\lib\endorsed
C、Application class扩展方案
通过两种途径来定义:通过设置 CLASSPATH 环境变量或使用 -classpath 命令行选项。JVM通过放置在{java_home}\lib\tools.jar来寻找和调用用户级的class。
-classpath 类路径设置用户类路径,它将覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定 CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成。
查看缺省的用户类路径,如:
String defaultUserDir = System.getProperty("user.dir");
System.out.println(defaultUserDir);
D、User class扩展方案
若未指定 -sourcepath 选项,则将在用户类路径中查找类文件和源文件。编译的过程中,若需要相关java类的则首先在sourcefiles或@files列出的java源码文件中查找并编译,如果没找到,就在-sourcepath指定的路径中查找java源码文件
-cp(classpath) 与 -sourcepath 的区别与联系:
成功的类型搜索可能生成类文件、源文件或两者兼有。以下是 javac 对各种情形所进行的处理:
- 搜索结果只生成类文件而没有源文件: javac 使用类文件。
- 搜索结果只生成源文件而没有类文件: javac 编译源文件并使用由此生成的类文件。
- 搜索结果既生成源文件又生成类文件: 确定类文件是否过时。若类文件已过时,则 javac 重新编译源文件并使用更新后的类文件。否则, javac 直接使用类文件。
缺省情况下,只要类文件比源文件旧, javac 就认为它已过时。( -Xdepend 选项指定相对来说较慢但却比较可靠的过程。)
@符号的使用
将要编译的原文件列入一个文本文件中,如src.txt文件,内容如下:
然后使用命令:javac -d classes @src.txt 进行编译。
sourcefile命令的使用
如果命令为:javac sourcefilepath
那么后面的sourcefilepath即代表了sourcefile命令。
可以参考的文章:
(1)http://www.tuicool.com/articles/FZNNNb
(2)https://www.cnblogs.com/wangpei/p/7084341.html
javac的命令(-Xbootclasspath、-classpath与-sourcepath等)的更多相关文章
- java-关于java_home配置,classpath配置和javac,java命令,javac编译器,和java虚拟机之间的关系
在每个人学习java的第一步,都是安装jdk ,jre,配置java_home,classpath,path. 为什么要做这些?在阅读java-core的时候,看到了原理,p141. 一 关于类的共享 ...
- Javac的命令
关于命令,还可以查看<Java 7程序设计>一书后面的附录A As per javac source docs, there are 4 kinds of options: standar ...
- Javac的命令(-Xlint)
在OptionName类中的枚举定义如下: XLINT("-Xlint"), XLINT_CUSTOM("-Xlint:"), -Xlint Enabl ...
- Javac的命令(注解相关)
1.-Akey[=value] Options to pass to annotation processors. These are not interpreted by javac directl ...
- 将Java和Javac的命令在控制台的输出重定向到txt文件
当我们在Windows控制台窗口执行程序时,输入如下命令: demo.exe > out.txt 就可以把demo程序的输出重定向到out.txt文件里面. 但是这种方法对于java和javac ...
- javac编译多个java文件以及-cp、-classp、-sourcepath
//编译多个文件 javac path_of_file_a/a.java path_of_file_b/b.java path_of_file_c/c.java -cp(classpath) 与 ...
- JAVA和JAVAC 命令行
转自:http://www.blogjava.net/pdw2009/archive/2008/06/12/207413.html?opt=admin javac和java命令行中的-classpat ...
- javac不是内部或外部命令在win10上的解决方案
Path环境变量能够让你在任何路径都能使用命令,可能你百度谷歌了各种方案都无法解决javac无法使用的问题,那么你可以试试如下解决方案: 首先博主配置了JAVA_HOME 参数为 C:\Program ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...
随机推荐
- Navicet Mysql数据库电脑本地备份
Navicet Mysql数据库电脑本地备份 1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业" ...
- XXX 不是当前用户的有效责任,请联系您的系统管理员
EBS中,有时进入一些基于OA Framework 的Web页面时,会出现这种现象: XXX 不是当前用户的有效责任,请联系您的系统管理员 ( or: xxx is not a valid resp ...
- 从极速飞艇源码 VantComponent 谈 小程序维护
在开发极速飞艇源码详情咨询Q166848365小程序的时候,我们总是期望用以往的技术规范和语法特点来书写当前的小程序,所以才会有各色的小程序框架,例如 mpvue.taro 等这些编译型框架.当然这些 ...
- C# 实用小类
/// <summary> /// 汉字转换拼音 /// </summary> /// <param name="PinYin"></pa ...
- .Net Core使用HttpClient请求Web API注意事项
HttpClient 使用HttpClient可以很方便的请求Web API,但在使用时有一些需要注意的地方,不然会给你的程序带来毁灭性的问题. HttpClient是一个继承了IDisposable ...
- FIM控制同步用户
C:\Program Files\Microsoft Office Servers\15.0\Synchronization Service\UIShell 这个路径下,你如果懂FIM,可以进去看看 ...
- js实现window.open不被拦截的解决方法汇总
一.问题: 今天在处理页面ajax请求过程中,想实现请求后打开新页面,就想到通过 js window.open 来实现,但是最终都被浏览器拦截了. 二.分析: 在谷歌搜索有没有解决方法,有些说可以通过 ...
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)
记得上<数据结构>课程时,利用栈的特性解决过四则混合运算表达式.而如今在编写小型关系数据库的时候,编译部分要处理where后面的逻辑表达式——检查语法正确与否的同时,还要将信息传给下一个接 ...
- iOS 内嵌 View 的响应
遇到一个问题就是我有一个 UITextField,点击后不能编辑而是会显示一个自定义的 dialog. 但发现问题是,UITextField 的对点击事件的反应非常吃顿,有时候好使有时候不好使. 后来 ...
- 【Oracle 12c】最新CUUG OCP-071考试题库(53题)
53.(12-14) choose the best answer: Examine the command to create the BOOKS table. SQL>CREATE TABL ...