java命令行基础:jar打包

jar打包具体流程如下:

1).HelloWorld.java代码如下:

复制代码代码如下:
package com.whty.hello;  
  
public class Hello{  
    public static void main(String[] args) {  
        System.out.println("Hello world");  
    }  
}

2).这时,我们希望代码能够像使用IDE一样被编译到classes目录(该目录需要自己建立)下。下面依然使用javac命令进行编译。

  打开CMD窗口
  进入工程所在目录,上述工程目录为F:\JavaProject\ahellodemo\。
  使用javac -d ./classes ./src/com/whty/hello/Hello.java进行编译。完成后可以看到F:\JavaProject\ahellodemo\classes\下多了个com目录,Hello.class文件也被编译到了F:\JavaProject\ahellodemo\classes\com\whty\hello目录下。

3).使用java命令运行编译后代码。

在CMD窗口中进入工程目录下的classes目录下,然后使用java com.whty.hello.Hello 命令运行编译后代码,输出 Hello world 。

4).打成可运行的jar包

经过上述三个步骤以后,我们可以先在classes目录下编写一个MANIFEST.mf文件内容如下,这里要注意每个冒号后面的英文空格:

复制代码代码如下:
Manifest-Version: 1.0  
Main-Class: com.whty.hello.Hello  
Class-Path:  

然后再CMD中进入工程classes目录,使用 jar -cvfm hello.jar MANIFEST.mf com 命令,这时该目录下回出现hello.jar文件。在CMD窗口中输入 java -jar hello.jar 会输出 Hello world 。

PS:

jar -cvfm hello.jar MANIFEST.mf com 打包整个com目录里的class

jar -cvfm hello.jar MANIFEST.mf *.class 打包当前目录里的所有class

(.mf文件后缀固定,但文件名随意,如test.mf也可以)






常见问题1:

打包命令中的MANIFEST.MF位置放置错误,如



正确的:





常见问题2:没有主清单找不到或无法加载主类:


a.没有主清单

jar包里的MANIFEST.MF文件没有Main-class: 这一行

b.找不到或无法加载主类:

在MANIFEST.MF文件中添加了Main-Class:后,什么都不填写或者填写的class名错误,就会出现找不到或无法加载主类。


这两种情况,都显示了无法加载主类。

第二个图,出错的原因是如果打包的是pakage或者总的工程文件,一定要在前面添加pakage名字,如:draw.print,无需class后缀。


问题解决:修改MANIFEST文件,或者打包时将自己写好的正确.mf文件打包进jar包

WinRAR打开jar包,找到里面的MANIFEST.MF文件。


我打包的是名为draw的包,里面有三个class,其中print.class是包含主方法的类。

.


在MANIFEST.MF文件添加Main-Class: draw.print。

Main-Class:为固定前缀,draw.print 为所要运行包含主方法的类名,要带上前面的packege的名字。



常见问题3:

Main-class: 冒号后无空格,如:


正确写法:


打包时出现如下错误:





常见问题4:

java -jar guessIt.jar

出现:


原因:

最后一行输入后要回车,留一行空行

错误写法:


正确写法:




最后说明:Manifest 技巧
总是以Manifest-Version属性开头
每行最长72个字符,如果超过的化,采用续行
确认每行都以回车结束,否则改行将会被忽略
如果Class-Path 中的存在路径,使用"/"分隔目录,与平台无关
使用空行分隔主属性和package属性
使用"/"而不是"."来分隔package 和class ,比如 com/example/myapp/

class 要以.class结尾,package 要以 / 结尾






常见问题5:java运行时出现GBK编码错误的解决方案

1. 运行:

 参数: -Dfile.encoding

# 注意:"-Dfile.encoding=utf-8" 中是没有空格的,且最好遵循 java [-options] -jar jarfile [args...] 的顺序

 java -Dfile.encoding=utf-8 -jar Test.jar


 2. 编译:
 参数: encoding
 javac -encoding utf-8 Test.java


注:部分资料收集来源于网上,资料仅作学习参考


猜你喜欢

转载自blog.csdn.net/qq_38329988/article/details/80731962