Java中jar包的问题

Java中打jar包的方法

引入包的概念


在我们实际编程的过程中,为了避免类名之间发生冲突,从而引入了包机制,但是有的人说我写的程序不会发生类名的冲突,我都用不同的名字不就行了,但是你应该考虑到的是,你应该是一个团队的协作开发,基本不是一个人的单打独斗,所以在这种情况下我们是无法避免类名发生冲突的,怎么办呢?sun公司给我们提供了方法,那就是打包,经过合适的打包,可以避免类名重复的冲突。

打包方法


首先先说一种良好的编程习惯,在我们编程的过程中,应该建立两个文件夹,分别是sources和classes文件夹,其中sources文件夹用于存放源代码文件,classes用于存放.class文件,在发布软件时,不需要将源码一起发布出去,只需要将class文件打成jar包之后发布。看下面的代码:

//源代码存放于:G:\JAVA\sources路径下,文件保存为test.java
package hello.world; //包名全部小写,后面的分号一定要加上
class Test{
   public static void main(String[] args){
       System.out.println("Hello,World!");
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

接着打开控制台程序在进入G:\JAVA\sources路径下,在控制台中输入下面的代码:

javac -d ../classes test.java  //  ../classes这个路径必须要自己指定
  • 1

当你进入G:\JAVA\classes文件夹之后你会发现,在这个文件夹之下生成了hello和world文件夹,也充分的说明了一个问题:Java中的打包操作实际功能相当于windows下的文件夹,放在不同的文件夹下避免同名冲突。那么此时问题来了,我们怎么运行这段代码呢?在没有发布jar包之前,我们使用下述命令:

//进入classes文件路径下,否则不能运行
java hello.world.demo1   //此时完整的类名是:包名.类名
  • 1
  • 2

打jar包

我们给用户的程序不可能是把.class文件,两点:第一,用户根本看不懂也不会运行;第二,用户最擅长的技能是双击和单击,怎么才能让这个代码通过双击或者单击就能运行呢?sun公司同样给了方法,那便是打jar包,还是将上面的例子打包成jar包。sun公司提供了jar.exe工具,可以很方便我们将.class文件打包为jar包,怎么用jar.exe呢?同样在控制台中输入:jar,便可以看到所有的参数,在我们平常的使用中,常用的参数只有cvf这三个,指令的格式为:

jar cvf 打成的jar包的名字 (一个或者多个)class文件或者文件夹
  • 1

接着我们用解压软件打开这个以.jar为后缀的文件,在其中有一个文件夹MANIFEST.MF,用记事本打开这个文本,写入下面的语句:

Main-Class: hello.world.test //注意:冒号是英文状态下的冒号,并且之后加一个空格,有且只有一个空格,多加一个空格程序都不能运行,之后加完整的类名,完整的类名应该是包名.类名(不加后缀.java
  • 1

保存上述文件。 
接着我们双击这个jar包之后发现,并不能运行,不是说打包为jar包之后就可以运行的吗?是这样的,但是打包成为jar包之后能运行仅仅限于窗体程序,对于命令行程序需要在命令行中输入下面指令:

java -jar 打包成的jar包名.jar
  • 1

便可以正确我的运行。

工具类打jar包

对于工具类,我们达成jar包之后不需要去指定主类,因为工具类是提供给别人用的,并没有主类,把jar包放在我们sources中,使用这个jar包中的类,发现找不到,原因是我们没有设置classpath路径,此时只需要在控制台中输入:

set classpath=./打包成的jar包.jar;  //其中.代表的是当前路径下,寻找打包成的jar包.jar,后面必须要加;

猜你喜欢

转载自blog.csdn.net/xiaobaixiongxiong/article/details/79362387