问个比较弱的问题,大家来解惑啊
Testjar.java代码如下package test1.test2.test3;
public class Testjar
{
    public static void main(String[] args)
    {
        System.out.println("Hello,World!");
    }    
}
然后执行
javac -d . Testjar.java生成Testjar.class位于
./test1/test2/test3/
这样的路径下现在使用jar命令归档
jar cvf Test.jar -C test1/ .则Testjar.class位于Test.jar中的 test1/test2/test3/ 路径下这个时候要使用java命令访问Testjar.class 应该如何操作啊?之前遇到过的情况,要访问的class文件在jar文件的根目录下,用
java -cp Test.jar Test就能够访问。稍微变了点花样,就玩不来了,唉……

解决方案 »

  1.   

    jar cvf Test.jar -C ./ .
    unzip -l Test.jar
    Archive:  Test.jar
      Length     Date   Time    Name
     --------    ----   ----    ----
            0  01-10-10 19:08   META-INF/
           71  01-10-10 19:08   META-INF/MANIFEST.MF
            0  01-10-10 19:08   test1/
            0  01-10-10 19:08   test1/test2/
            0  01-10-10 19:08   test1/test2/test3/
          438  01-10-10 19:08   test1/test2/test3/Testjar.class
          155  01-10-10 19:07   Testjar.java
     --------                   -------
          664                   7 filesjava -cp Test.jar test1.test2.test3.Testjar
      

  2.   

    javac -d classes Testjar.javajar cvf Test.jar -C classes/ .
      

  3.   

    还是不行啊……楼上两位的方法,
    执行java命令的时候总是提示java.lang.ClassNotFoundException...
      

  4.   

    javac Testjar.java
    jar cvf test.jar ./test1/test2/test3
    java -cp test.jar test1.test2.test3.Testjar
      

  5.   

    还是不行的。不知道是不是根本就没有法子访问jar包中非根目录下的class。
    楼上的几位,你们编译并归档得到jar文件后,把除jar文件以外的其它文件删除,否则执行java命令的时候检索到的是jar外面的Testjar.class。
      

  6.   

    如果是jar包中的class不能直接访问也就罢了,可使jar包中根目录下的就可以访问,闲着没事试试看jar包中多点层次结构会怎么样,结果捣腾出来这么个问题。困惑……
      

  7.   

    java -cp Test.jar test1.test2.test3.Testjar
    前面要加上包名。
    不加当然是错误的。
    可以看看王森的《Java深度历险》扫盲
      

  8.   

    URL = new URL(this.getClass().getClassLoader().getResource("xx/xx/xx/xx.xx"));或InputStream is =  this.getClass().getClassLoader().getResourceAsStream("xx/xx/xx/xx.xx"));
      

  9.   

    谢谢10楼的提醒。不过这个问题我注意到了的,也尝试过。实际情况是这样。
    有这样一个jar包,内部结构如下
    Test.jar/
            /test1/
                  /test2/
                        /test3/
                              /Testjar.class
    现在想通过java命令执行Testjar.class。这个Testjar.class是顶楼那段代码编译得到的。
    编译使用的是javac -d . Testjar.java
    所以会有这么个文件夹结构。
    然后现在想用java命令访问Testjar.class。另外,回11楼——水平有限,我没看懂。