将Jar文件与-classpath JAVA结合使用

时间:2013-02-28 09:08:32

标签: java jar classpath

我有一个关于编译一个在Jar文件(MyJar.jar)中有一些依赖类的类的问题。通过将目录树放在-classpath选项中(例如:javac -cp MyJar MyClass.java),是否会检查所有子目录的类或目录树中的顶级类? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

将对-cp指定的目录进行递归搜索:否

当类加载器进入类路径中指定的目录时,它开始使用类所在的package作为子目录。如果没有指定包,那么类加载器会将它放在目录的直接子节点(类文件)下。

这是-cp目标/罐子和package name的组合。

假设您有以下目录结构

+ Project
    sayhello.jar
    + dir
        + sub
            + com
                + test
                    SayHelloMain.java

SayHelloMain.java的代码是(注意包声明

package com.test;

import miscellaneous.so.SayHello;

public class SayHelloMain {
   public static void main(String[] args) {
       SayHello.sayIt();
   }
}

以及包含类sayhello.jar

的jar文件SayHello

如果在与java源文件相同的目录中打开命令行,则必须编译类SayHelloMain

javac SayHelloMain.java -cp ..\..\..\..\sayhello.jar

或者如果在dierctory Project

中打开了命令行
javac dir\sub\com\test\SayHelloMain.java -cp sayhello.jar

假设您已在dierctory Project

中打开命令行

这是您运行课程SayHelloMain

的方法
java -classpath dir\sub;sayhello.jar com.test.SayHelloMain

班级名称必须完全合格,因此com.test.SayHelloMain

命令

java -classpath dir;sayhello.jar com.test.SayHelloMain

将无效,因为并非递归搜索目标dir

命令

java -classpath dir;sayhello.jar sub.com.test.SayHelloMain

也不起作用,因为没有这样的包sub.com.test。包只是在类

的包声明中定义的包

答案 1 :(得分:0)

如果你的目录树代表包,那么你的所有类都将被加载和使用。

例如,以下类:

package my.company.project;

public class MyClass {
    public static void main(String[] args) {}
}

应该在 my / company / project 文件夹中可以使用。

相关问题