javac,java,jar命令
程序员文章站
2022-03-10 16:51:25
...
javac
javac就是把java源文件(.java)编译成字节码文件(.class)。
具体操作来个demo:
Man.java:
Main.java:
好了,项目结构有了,源码也有了,那怎么把源码编译到指定的目录呢?这里我们想放到build目录里,先cd到demo目录里。
- 方法一:使用通配符,javac -d build src/god/aliang/demo/*/*.java
- 方法二:写个脚本吧,把所有源文件都集中到一个目录下,比如我把所有源文件都放到main包下了,那就可以这样编译:javac -d build src/god/aliang/demo/main/*.java
- 方法三:列个源文件清单,但是这样不能使用通配符,每个源文件都要写全,挺麻烦的,不介绍了。
使用上面的命令编译后,再来看项目结构:
我们发现build目录里已经有了对应的包和编译成的.class文件了,包是根据源文件的package信息自动创建的。
java
编译好了,怎么让jvm运行字节码文件呢?就是靠java命令啦。先cd到build目录,这里就是classpath了,直接输入命令:java god.aliang.demo.main.Main。
注意:jdk1.5以后就不用设置环境变量classpath了,默认会以当前目录为类加载路径。当然,也可以通过java -cp或者java -classpath选项来指定。还有,jvm寻找的是类名,不是文件名,所以不要添加.class后缀;类中也必须有主函数,不然没法加载数据到内存里。
其它参数说明:
这里只介绍常用的标准参数(-开头)和非标准参数(-X开头),对非Stable参数(-XX开头)不做介绍。
- main函数接受一个String[ ]参数,怎么设置呢?
这样在main函数就可以通过形参args[0]获得"阿亮",args[1]获得真帅。java god.aliang.demo.main.Main "阿亮" "真帅"
- -jar:运行一个jar包,前提这个jar包必须指定了函数入口,这个后面介绍jar命令的时候用到。
- -classpath,-cp:指定字节码文件或jar包路径,如果有多个路径用路径分隔符(Linux是冒号,Win是分号)。例如前面的demo,可以进入demo目录,然后:
java -cp build:/var/test.jar god.aliang.demo.main.Main
- -Dprop=val:这个经常使用了。
然后通过System.getProperty("mydemo.conf")获得字符串"/var/mydemo.properties",就可以继续获得配置文件详情了。注意:可以同时配置多个-D参数,当val的值包含空格时,得用双引号包围。java -Dmydemo.conf=/var/mydemo.properties god.aliang.demo.main.Main
- -Xms256m:jvm堆内存初始分配256m,用完后jvm会开始gc或扩展堆内存。
- -Xmx1024m:jvm最大支持的堆内存大小。
- -Xmn500m:年轻代堆大小,这个官方建议是设置为mx的3/8,这个参数对系统影响较大。
- -Xss512k:设置单个线程栈的大小,一般默认为512k,设置的越小,可以启动的线程数越多,但肯定不会超过系统所允许的最大值。
jar
jar命令和tar命令用法基本一模一样,如果不是有特殊要求的话,感觉完全可以用tar替代jar命令啊。
打包:加了M参数,不会生成META-INF/MANIFEST.MF清单文件
jar -cvfM god.aliang.demo-1.0.0.jar demo/build
打包:加了m参数,指定自定义清单文件
jar -cvfm god.aliang.demo-1.0.0.jar /var/my-manifest.mf demo/build
打包:使用e参数,指定主函数入口类,并且没有加m或M,所以会生成默认清单文件
jar -cvfe god.aliang.demo-1.0.0.jar god.aliang.demo.main.Main demo/build
更新包:使用u参数,更新包的一个或多个.class文件
jar -uf god.aliang.demo-1.0.0.jar god.aliang.demo.main.Main.class
解包:完全可以用unzip代替,还能指定解包目录
jar -xvf god.aliang.demo-1.0.0.jar
运行jar包:这个jar包得有main函数,而且清单文件已经指定了入口类
java -jar god.aliang.demo-1.0.0.jar