以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打包的更多相关文章

  1. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

  2. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  3. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

  4. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  5. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

  6. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  7. Java基础篇 - 强引用、弱引用、软引用和虚引用

    Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...

  8. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  9. java基础篇1

    JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...

随机推荐

  1. 一般处理文件.ashx中使用文件session遇到的问题

    在给其他网站提供接口的时候用ashx做的,在文件调用cs中的方法,方法中的Session报错:System.NullReferenceException: 未将对象引用设置到对象的实例. /// &l ...

  2. qt--- vs

    qt with vs 1.安装vs2012: 2.下载Qt 5.2.0 for Windows 32-bit (VS 2012, 579 MB) 和 Visual Studio Add-in 1.2. ...

  3. jq 判断输入数字

    jq 判断输入数字 <input   id="N_source" name="N_source"   type="text" valu ...

  4. 常用三方,Reachability 检测网络连接

    常用三方 Reachability 检 测网络连接 用来检查网络连接是否可用:包括WIFI和 WWAN(3G/EDGE/CDMA等)两种工作模式. 可以从Apple网站下载到: http://deve ...

  5. NSDate的运算

    NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能.Date对象是不可改变的. 如 ...

  6. HDU 1166 单点更新,区间求和

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. 织梦dedecms分类信息模型上一页下一页失效办法

    修改文件/include/arc.archives.class 将一下代码 $next = (is_array($nextR) ? " where arc.id={$nextR['id']} ...

  8. C- printf的使用

    ASC C之后引入的一个特性是,相邻的字符可以被自动连接 /* printf.cc * 2014/09/02 update */ #include <iostream> using nam ...

  9. highcharts的.net本地导出环境安装记录

    由于项目中highcharts需要内网使用,需要本地搭建导出的环境.下面简述下步骤: 1.下载开源的.net导出文件:https://github.com/imclem/Highcharts-expo ...

  10. OCR技术

    "起初我写这篇教程是在情人节,OCR可以带给你一整年的爱". 你之前肯定已经见过,OCR技术被应用于在平板电脑上将扫描文件处理成手写字迹,还被应用于谷歌最近添加到他们的Transl ...