繁体   English   中英

将Jar文件与-classpath JAVA结合

[英]Combining Jar file with -classpath JAVA

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

是否会递归搜索-cp指定的目录:否

当类加载器进入在类路径中指定的目录时,它将使用该类所在的package作为子目录开始。 如果未指定包,则类加载器将其放在目录的直接子级(类文件)下。

它是-cp direcoties / jars和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文件sayhello.jar

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

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这样的软件包,它也将sub.com.test 包仅是在类的包声明中定义的包

如果您的目录树表示软件包,那么所有类都将被加载并可用。

例如,以下类:

package my.company.project;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM