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 ...
随机推荐
- Jmeter-Ant 生成测试报告
一.安装jmeter 配置环境变量 JMETER_HOME D:\SProgram\jmeter CLASSPATH %JMETER_HOME\lib\ext\ApacheJMeter_core.ja ...
- 6.nuget安装C#Driver驱动ZooKeeperNet
一: C# 的Drivers 1. nuget上下载 zookeeper.Net IWatcher是什么?: client 连接到 server 后,会在server上面注册一个watcher ...
- 2.自己的Github注册流程
一开始申请Github,说实话我真的不知道它是什么东西,而且有什么用途.然后我就用360百科搜索了一下有关它的介绍:. 而说明的是Git是一个分布式的版本控制系统.然后我进入官方网站进行账号注册,而注 ...
- IKAnalyzer兼容Lucene 5.4.0版本抛出异常?
ava.lang.AbstractMethodError: org.apache.lucene.analysis.Analyzer.createComponents(Ljava/lang/String ...
- js练习计算器
js练习计算器,支持鼠标点击.键盘操作 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- centos 7.6 开机报错信息(一):welcome to emergency mode!
welcome to emergency mode!after logging in ,type "journalctl -xb" to view system logs,&quo ...
- c#设计模式之代理模式(Proxy Pattern)
引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...
- django drf 级联数据和RetrieveModelMixin
1.定义View from django.shortcuts import render from rest_framework.views import APIView from rest_fram ...
- Webpack vs Rollup
本文由作者余伯贤授权网易云社区发布. 2017年4月份的时候,Facebook将React的构建工具换成了Rollup.很多人就有疑问了,Webpack不也是Facebook团队开发的吗,为什么不使用 ...
- python网络编程--socket,网络协议,TCP
一. 客户端/服务端架构(用到网络通信的地方) 我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档 ...