现在写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 -encoding utf8

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: ()Vpublic 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.jar0 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.class0 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/ .

参考链接:
命令行执行java程序

Java_java命令行编译运行相关推荐

  1. 命令行编译运行CSharp文件

    命令行编译运行CSharp文件 找到csc.exe所在的路径.如我本机上为"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" 在环境变量 ...

  2. c语言用命令行编译运行程序_使用C程序执行系统命令

    c语言用命令行编译运行程序 Sometimes, we may need to execute Linux/Windows DOS commands through our C program. (N ...

  3. Java按包编译jar_java用命令行编译运行时带有包和使用外部jar包的情况

    命令行编译运行Java程序时,加载指定目录中的Jar包: 解决方案一: 编译:javac -Djava.ext.dirs=./lib Test.java  或 javac -Djava.ext.dir ...

  4. java命令行编译运行遇到java:5: 错误: 编码GBK的不可映射字符 (涓変釜鏋勯?犲嚱鏁?)解决方法

    java命令行编译运行遇到java:5: 错误: 编码GBK的不可映射字符 (涓変釜鏋勯?犲嚱鏁?)解决方法 错误原因:使用简单javac 命令编译java文件,如果代码中存在中文,就算是注释有中文的 ...

  5. c 运行 java linux命令行参数,Linux下用命令行编译运行Java总结

    最近使用腾讯云的Cloud Studio写Java,只能使用命令行进行编译运行,趁此机会,学习一下Linux的一些常用命令.平时windows下IDE用习惯了,现在用命令行进行编译运行,发现其实问题还 ...

  6. java命令行编译命令_Java使用命令行编译运行程序

    一.摘要 使用javac命令来编译java文件生成.class文件 使用java命令+类名来运行编译好的class文件 二.编译不含包名的程序 假设HelloJava.java代码文件如下 Java ...

  7. java module命令行编译运行

    使用命令行javac和java命令编译和运行模块. 项目目录:所有模块的顶层目录mymodapp . ├── appmodules │ ├── appstart │ │ ├── appstart │ ...

  8. 如何解决命令行编译运行Java文件时报错Could not find or load main class ...

    前言 以前一直用Eclipse来运行Java程序,从未在命令行中编译运行过Java文件.直到最近某次运行别人写的bat文件时,出现"Could not find or load main c ...

  9. java 编译文件 命令,CMD命令行编译运行单个java文件

    java文件中不含包名 这种情况比较简单 public class NoPackage{ public static void main(String[] args){ System.out.prin ...

最新文章

  1. iOS审核秘籍】提审资源检查大法
  2. 制作网站设计项目进度表让用户充分了解网站制作进程
  3. 整理:C++中sprintf()函数的使用详解
  4. 解决requests-SSL: CERTIFICATE_VERIFY_FAILED]问题
  5. java处理高并发高负载类网站的优化方法
  6. [Linux] 动态库加载顺序
  7. 当前目录未找到系统,请尝试选择更深层的目录再次搜索解决方法
  8. 华为自动驾驶域控制器:现货PK期货,工程能力PK只有算力
  9. 下载webpack依赖报错“Refusing to install package with name “webpack“ under a package”
  10. android 实现页面跳转代码,Android 实现页面跳转
  11. wince 播放器 最终版本
  12. 推荐几个比较好的软件测试博客论坛
  13. Win32应用程序开发:完整的开发流程
  14. aria2 linux一键安装,Aria2一键安装及管理脚本,搭建AriaNg前端
  15. 怎样实现在单片机上跑LINUX系统,简述Linux如何应用在嵌入式单片机上
  16. stm32f407固件库移植ucosii_v2.92.07
  17. 逆势马丁网格策略交易演示
  18. 完成端口 完成端口 完成端口 还是完成端口
  19. 第一天-1-markdown笔记学习
  20. python读取身份证中的生日信息

热门文章

  1. 最大似然估计(Maximum likelihood estimation)(通过例子理解)
  2. 示波器x1档与x10档的区别
  3. 聚类个数的选择:轮廓系数(计算公式和原理)
  4. 轮廓系数——评估聚类模型的性能
  5. 相机投影过程(码—基于Opencv)
  6. Android 横向滚动列表 (类似横向ListView)
  7. Hive调优技巧汇总
  8. 聊聊游戏:《空洞骑士》那些你不知道事
  9. 动态规划法求解最大连续子序列和问题
  10. php 换行 html_总结html,css中的各种换行方法