日期:2014-05-20  浏览次数:20649 次

JAVA的Jar 和 package的问题,大家指点一下!!
首先是   package的问题,看以下代码!
package   com.ppp;
public   class   pop
{
public   static   void   rint(String   s)
{
System.out.print(s);
}
public   static   void   rintln(String   s)
{
System.out.println(s);
}
}
我用javac执行的时候编译过去了,可是我在那里也找不到com\ppp这两个文件夹,正常来讲应该是在classpath目录里的这些文件夹下,可没有啊
我在jcreact编译则在当前目录生成了这个文件夹。我将这个文件夹做成了ming.jar,也把他放到了classpath路径里的了,以下为classpath路径.;
C:\ProgramFiles\Java\jdk1.5.0_03\lib\tools.jar;C:\ProgramFiles\Java\jdk1.5.0_03\lib\dt.jar;E:\java   tools\ming.jar
可是当我又建新类以下代码
import   com.ppp.pop;
public   class   Text
{
public   static   void   main(String[]   a)
{
pop   p   =   new   pop();

}
}
编译不过,说找不到com.ppp这个包。
在打包应用这方面谁能给我好好地讲一讲啊。先在这里谢了。

------解决方案--------------------
在java的编程中,包是一个非常重要的概念.它是用来字节码文件的管理.包名是由文件的层次结构组成.例如:p.p1.p2.p3 事先我们在classpath设置一个基准类路径.包名就是相对它存在,假设classpath=E:\practice,在它下有一个文件夹p,p下包含p1,p1下包含p2,p2下包含p3.当我们定义java源文件时,在文件的最前面(第一行)可以有package语句(只能有一条这样的语句),它的作用,可以在声明的包(文件的层次结构)生成相应的字节码文件.java虚拟机装载类时,它是沿classpath环境变量指定的路径中逐一查找,加载最先找的的.import表示声明,表示此类中需要,引入的类.包可以用真实的文件的层次结构组成,也可以使用jar机制.
(java虚拟机会在内存中,自动解压,形成文件的层次结构)
1 真实的文件的层次结构组成(编译可自动生成)
在指定的classpath 下编译java源文件 javac -d BaseClassPath <.> Name.java
这样就会在BaseClassPath <.> 基础上,将编译后的class文件放在相应的位置.
运行一定要记住使用java 包路径.类名.(编译是不强调大小写,但编译后,运行的类名一定要和类文件名
一样,区分大小写,这个大小写问题我反复遇到.没有掌握实质)

2 使用jar(Java Archive File)机制
1)在windows下生成jar文件
当然经过编译后,包的真实的文件的层次结构一存在.只需右健选择添加到压缩文件,修改压缩文件名name.jar(jar与zip压缩文件兼容,选zip,把name.zip该为name.jar.当时我在rar基础上该为jar,结果不行),点击确定就生成了,name.jar,此时需要在classpath加入jar路径.(对jar文件解压,右健选择解压到当前文件夹.其它会多一层结构)
2)在ms-dos 下使用jar.exe
进入classpath基目录 jar cvf p.jar p(p.jar要生成的jar文件,p是目录名)
a jar cf p.jar p 生成p.jar,如果当前存在则覆盖.
b jar cvf p.jar p 带v参数,将显示打包的详细信息
c jar tf p.jar 显示jar文件中包含的目录的文件名列表
d jar tvf p.jar 除上述之外,显示一些细节
e jar xf p.jar 解压p.jar到当前目录
f jar xvf p.jar 解压带有一些详细信息
g 重定向 jar tvf p.jar > 路径\filename.txt