java基础篇-jar打包
以helloworld程序为例:
一:正常流程:
1.首先编写一个hello.java的程序:
public class Hello {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
保存到C:/temp 目录下。
2.编译:hello.java
cd C:/temp
javac hello.java
在C:/temp目录下则会多出一个hello.class文件。(此时如果输入命令:java hello。则会出现hello world的结果。程序运行成功)。
3.打包step1:
//将多个类文件归档到一个名为hellojar.jar的档案中(可以在末尾添加多个文件,以空格分隔)
jar cvf hellojar.jar hello.class
4.修改jar包里面的MANIFEST清单:
加入:
//主程序的main入口所在的类,其值为该类的完整路径。
Main-class: Hello
并将该文件拷贝到temp目录下。
5.打包step2:
//使用现有清单文件“MANIFEST”并 将"hello.class"归档在“hellojar.jar”中:
jar cvfm hellojar.jar MANIFEST.MF hello.class
6.执行jar:
java -jar hellojar.jar
到这儿简单的helloworld 打包程序就完事了。
当然即使最简单的jar打包也会出现很多问题,特别是对于新手!
现在次列出:
1. jar打包出现java.io.IOException: invalid header field
解决:在MANIFEST文件中修改的时候,应注意:
1.每个标签冒号后都跟上一个空格
2.最后一行需要有一个回车键,否则后面那一行是不能打包进去的
3.注意冒号是否为英文半角。
补充说明:Manifest技巧
1.总是以Manifest-Version属性开头
2.每行最长72个字符,如果超过的话,采用续行
3.确认每行都以回车键结束,否则改行将会被忽略
4.如果Class-Pass中存在路径,使用“/”分隔目录,与平台无关
5.使用空行分隔属性和package属性
6.使用"/"而不是"."来分隔package和class。比如com/example/myapp/
7.class要发.class结尾,package要以/结尾
2.jar执行的时候出现:
java错误:找不到或无法加载主类:
这种问题出错的原因有很多,列出常用的几个:
解决:
1.首先确定你的jar包里面有hello.class文件!
2.确定你的程序里有main函数
3.执行java hello确认是否能够运行,不能运行请参考下面:
4.检查你的class_path和path环境:
HOME是 D:\Java\jdk1.8.0_11(你自己jdk的安装环境)
Path是 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH是 .;%JAVA_HOME%lib;%JAVA_HOME%lib\tools.jar
5.在配置环境变量的时候最好路径中不要含有中文和空格! 参考文章:
1.http://bbs.csdn.net/topics/380204156
2.http://zhidao.baidu.com/link?url=EWCI5iWXX_nSPqAtvJ9AqXd_BL8gwnFlg00ByZzhfd3hBxTcHycADGQGWVizYdT5L2AwHEg5OQExpvuSphfu0x0O0ksQrTFwRIBZzbq1UJO
3.http://jingyan.baidu.com/album/3c48dd344a2146e10be3588c.html
4.http://jingyan.baidu.com/article/ff42efa904b4d7c19e220282.html
5.http://blog.csdn.net/gz_xiangjun/article/details/6962818
java基础篇-jar打包的更多相关文章
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- Java基础篇(JVM)——类加载机制
这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- java基础篇---HTTP协议
java基础篇---HTTP协议 HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- Java基础篇 - 强引用、弱引用、软引用和虚引用
Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...
- java基础篇 之 构造器内部的多态行为
java基础篇 之 构造器内部的多态行为 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...
- java基础篇1
JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...
随机推荐
- Flume Hello World!
Flume 是 Cloudera 公司开源出来的一套日志收集系统.模型如下所示: 图中Source,Sink分别代表数据源和数据目的地,channel表示Source和Sink之间的通道.配置文件为/ ...
- eclipse debug时老提示edit source lookup path解决方案
用myeclipse debug web应用的时候,总提示edit source lookup path,每次都得手动选择项目,费时费力.在网上终于找到了方法. 搬运:http://www.educi ...
- eclipse常用的字体
1.consolas 2.Segoe Script 3.Segoe Print 4.Courier New
- js事件应用
---恢复内容开始--- 一.自定义滚动条 var oDiv=document.getElementById('div1'); var oParent=document.getElementById( ...
- 常州培训 day3 解题报告
第一题: 给出数轴正半轴上N个点的坐标和其权值,给出初始体力值M,人一开始在位置0,体力值会随着走过路程的增加而增加,走多少个单位的路消耗多少体力值.到每个点可以打掉,消耗的体力值就是其权值.求 最多 ...
- winform按钮和子按钮
实现目标: 一.两组按钮1和2,其中按钮2有两个子按钮, (1)当选按钮1时,按钮2和其子按钮不选中: (2)选中按钮2或其子按钮3和4时,1不选中 (3)选中按钮2时,默认选中其子按钮3 (4)选中 ...
- SQL SERVER 创建作业
),, , , , , ),SERVERPROPERTY(N, , , ...
- python下的复杂网络编程包networkx的安装及使用
由于py3.x与工具包的兼容问题,这里采用py2.7 1.python下的复杂网络编程包networkx的使用: http://blog.sina.com.cn/s/blog_720448d30101 ...
- 启用jboss热部署
Please make sure to add <configuration> <jsp-configuration deve ...
- 使用Myeclipse创建自定义签名debug keystore
1.在已经创建后的android项目上右击鼠标,如图所示 2.选择next下一步 3.选择create new keystore 注意 这里密码要输入android 4.点击next,录入基本信息 ...