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 ...
随机推荐
- scala中Nil用法
http://www.runoob.com/scala/scala-lists.html 即Nil是空List 双冒号是追加进入 package com.yjsj.spark object scala ...
- iOS9 Https技术预研
一.服务器需要做的事情: 1.要注意 App Transport Security 要求 TLS 1.2, 2.而且它要求站点使用支持forward secrecy协议的密码. 3.证书也要求是符合A ...
- ASP.NET MVC Core的TagHelper (高级特性)
这篇博文ASP.NET MVC Core的TagHelper(基础篇)介绍了TagHelper的基本概念和创建自定义TagHelper的方式,接着继续介绍一些新的看起来比较高级的特性.(示例代码紧接着 ...
- python中GUI使用小结
1 先来个简单的 import wx app = wx.App() frm = wx.Frame(None, title="Hello World") frm.Show() app ...
- 关于easyui展示慢的Debug
同事开发的软件系统采用Easyui做的前台界面,当业务变得比较复杂之后,展示效果就变得很慢,于是我开始了原因的排查,现在已经找到了具体的原因,所以拿出来与大家一起分享调试过程. 既然调试的是前端,那么 ...
- 其他信息: 实体类型 xxxxx 不是当前上下文的模型的一部分。
我是手动添加的EF类的, 解决方法: 没有在DbContext 添加 public virtual DbSet<xxx> xxxx{ get; set; } 导致不在上下文中
- bzoj1047理想的正方形
题目链接 纪念又双叒叕的一道暴力碾标算的题 我们考虑纯暴力 #include<iostream> #include<cstdio> #include<algorithm& ...
- long int double float
参考:https://blog.csdn.net/ideality_hunter/article/details/78432486 long是长整型,64位 int是短整型,32位 double是双精 ...
- 洛谷P4250 [SCOI2015]小凸想跑步(半平面交)
题面 传送门 题解 设\(p\)点坐标为\(x_p,y_p\),那么根据叉积可以算出它与\((i,i+1)\)构成的三角形的面积 为了保证\(p\)与\((0,1)\)构成的面积最小,就相当于它比其它 ...
- CodeForces1142/1143题解
题面 传送门(1143) 传送门(1142) \(1143A\) 咕咕 n=read(); fp(i,1,n)a[i]=read(),++cnt[a[i]]; fp(i,1,n)if(++c[a[i] ...