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 ...
随机推荐
- Codeforces761B Dasha and friends 2017-02-05 23:34 162人阅读 评论(0) 收藏
B. Dasha and friends time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces768B Code For 1 2017-02-21 22:17 95人阅读 评论(0) 收藏
B. Code For 1 time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 分布式流式计算平台——S4
本文是作者在充分阅读和理解Yahoo!最新发布的技术论文<S4:Distributed Stream Computing Platform>的基础上,所做出的知识分享. S4是Yahoo! ...
- C# SQLite 数据库
数据库 Oracle.Oracle的应用,主要在传统行业的数据化业务中,比如:银行.金融这样的对可用性.健壮性.安全性.实时性要求极高的业务 MS SQL Server.windows生态系统的产品, ...
- leetcode 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: "A man, a plan, a c ...
- 关于类属性值校验的一点记录 【知识点Attribute】
好久没有进来了,之前励志坚持写博客,记录自己在做代码搬运工这段历程中点滴,可是仅仅只坚持了几天,就放弃了!果然是,世上无难事,只要肯放弃!哈哈……闲话不多说,开始进入正题,给自己留点笔记,避免将来老了 ...
- C#导出EXCEL,并生成charts表
需要添加引用 Microsoft.Office.Interop.Excel 注意:使用Microsoft.Office.Interop.Excel 非常耗时.对性能有要求建议用其他. 如果要用,把数 ...
- 数据库路由中间件MyCat - 源代码篇(4)
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2. 前端连接建立与认证 Title:MySql连接建立以及认证过程client->MySql:1.T ...
- Android 色差(尤其白色)的解决办法
Android 中有时出现色差,我碰到的情况是 Galaxy ACE4 中的白色和系统白色不同,所以显示时候颜色不同,很难看. 我发现的问题是 Color.white, android.R.color ...
- 使用ssm实现校验密码
由于审题不清,在完成作业“servlet实现进行用户名和密码验证”中使用了jdbc连接数据库的方式实现,没用静态方式验证,故本次作业使用ssm实现 本次作业上传到百度网盘:链接:https://pan ...