小编典典

将Jar文件与-classpath JAVA结合

java

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


阅读 299

收藏
2020-11-23

共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

SayHelloMain如果在与Java源文件相同的目录中打开命令行,这就是编译类的方式

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

或者如果在目录中打开了命令行 Project

javac dir\sub\com\test\SayHelloMain.java -cp sayhello.jar

假设您在目录中打开了命令行 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。包仅是在类的包声明中定义的包

2020-11-23