java命令行编译命令_Java_java命令行编译运行

现在写java或者安卓项目都是使用IDE完成,但是有些简单的工作,使用IDE太浪费了,比如打包一个类的jar,如果使用命令行,也非常简单;所以复习一下,便于以后翻阅;

1.创建文件Hello.java

Hello.java目录为:D:/com/raise/base/Hello.java

内容:

package com.raise.base;//指定包名

//需要导包的在这里导入

public class Hello {

public static void main(String [] args) {

System.out.println("Hello World!");

}

}

2.编译生成.class

在windows命令行下编译Hello.java生成Hello.class:

javac D:\com\raise\base\Hello.java

Hello.class路径:D:\com\raise\base\Hello.class

3.运行执行Hello

D:\>java com/raise/base/Hello

Hello World!

注意这里需要在D:\目录下运行,指定class文件时,不需要.class后缀,需要指定包名

4.查看Hello的java签名信息

java类的签名信息在jni开发中有重要作用。

使用javap -s查看

D:\>javap -s com/raise/base/Hello

Compiled from "Hello.java"

public class com.raise.base.Hello {

public com.raise.base.Hello();

Signature: ()V

public static void main(java.lang.String[]);

Signature: ([Ljava/lang/String;)V

}

5.打包jar

将.class文件打包jar,便于项目之间使用,注意.java文件不需要打包,所以需先删除;

使用jar -cvf hello.jar com

D:\>jar -cvf hello.jar com

已添加清单

正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: com/raise/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: com/raise/base/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: com/raise/base/Hello.class(输入 = 431) (输出 = 297)(压缩了 31%)

将会在D:\目录下生成hello.jar;

查看jar包中的内容jar -vtf hello.jar:

D:\>jar -vtf hello.jar

0 Fri Jun 02 18:00:24 CST 2017 com/

0 Fri Jun 02 18:00:42 CST 2017 com/raise/

0 Fri Jun 02 18:56:46 CST 2017 com/raise/base/

431 Fri Jun 02 18:46:16 CST 2017 com/raise/base/Hello.class

0 Fri Jun 02 19:29:04 CST 2017 META-INF/

100 Fri Jun 02 19:30:30 CST 2017 META-INF/MANIFEST.MF

注意该jar中多了一个清单文件MANIFEST.MF,这是java标准清单文件,后面会有用;

6.执行jar文件

使用java -jar hello.jar执行jar

D:\>java -jar hello.jar

hello.jar中没有主清单属性

但是报错,提示没有清单文件,其实第5步已经查看了jar中是有这个文件的,所以这里有坑,那我们百度一下,百度之后得知清单文件中并没有配置main函数所在的java类,那我们增加即可;

1. 首先解压jar

2. 然后修改MANIFEST.MF,增加一行Main-Class: com.raise.base.Hello

3. 再打包成jar

解压jar:

D:\>jar -xf hello.jar

修改后的MANIFEST.MF文件:

Manifest-Version: 1.0

Created-By: 1.7.0_67 (Oracle Corporation)

Main-Class: com.raise.base.Hello

打包jar:

D:\>jar -cvfM hello.jar com META-INF

正在添加: com/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: com/raise/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: com/raise/base/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: com/raise/base/Hello.class(输入 = 431) (输出 = 297)(压缩了 31%)

正在添加: META-INF/(输入 = 0) (输出 = 0)(存储了 0%)

正在添加: META-INF/MANIFEST.MF(输入 = 100) (输出 = 97)(压缩了 3%)

注意这里要增加参数M,指定默认的清单文件不要打包,因为我们已经有了。

再运行:

D:\>java -jar hello.jar

Hello World!

ok,搞定!

搞一个这么简单的Hello World!都这么麻烦,现在知道IDE是有多好了吧!

最后附上jar命令的使用帮助,其实就是jar -help结果!

D:>jar -help

非法选项: h

用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files …

选项包括:

-c 创建新的归档文件

-t 列出归档目录

-x 从档案中提取指定的 (或所有) 文件

-u 更新现有的归档文件

-v 在标准输出中生成详细输出

-f 指定归档文件名

-m 包含指定清单文件中的清单信息

-e 为捆绑到可执行 jar 文件的独立应用程序

指定应用程序入口点

-0 仅存储; 不使用情况任何 ZIP 压缩

-M 不创建条目的清单文件

-i 为指定的 jar 文件生成索引信息

-C 更改为指定的目录并包含其中的文件

如果有任何目录文件, 则对其进行递归处理。

清单文件名, 归档文件名和入口点名称的指定顺序

与 ‘m’, ‘f’ 和 ‘e’ 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的归档文件中:

jar cvf classes.jar Foo.class Bar.class

示例 2: 使用现有的清单文件 ‘mymanifest’ 并

将 foo/ 目录中的所有文件归档到 ‘classes.jar’ 中:

jar cvfm classes.jar mymanifest -C foo/ .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值