javac,java,jar命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aliang_godlike/article/details/79367660

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[ ]参数,怎么设置呢?
    java god.aliang.demo.main.Main  "阿亮"  "真帅"
    这样在main函数就可以通过形参args[0]获得"阿亮",args[1]获得真帅。
  • -jar:运行一个jar包,前提这个jar包必须指定了函数入口,这个后面介绍jar命令的时候用到。
  • -classpath,-cp:指定字节码文件或jar包路径,如果有多个路径用路径分隔符(Linux是冒号,Win是分号)。例如前面的demo,可以进入demo目录,然后:
    java -cp build:/var/test.jar god.aliang.demo.main.Main
  • -Dprop=val:这个经常使用了。
    java -Dmydemo.conf=/var/mydemo.properties god.aliang.demo.main.Main
    然后通过System.getProperty("mydemo.conf")获得字符串"/var/mydemo.properties",就可以继续获得配置文件详情了。注意:可以同时配置多个-D参数,当val的值包含空格时,得用双引号包围。
  • -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

猜你喜欢

转载自blog.csdn.net/aliang_godlike/article/details/79367660