java - 将 Jar 文件与 -classpath JAVA 组合

标签 java jar classpath

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

最佳答案

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

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

它是-cp direcoties/jars和包名称的组合。

假设您有以下目录结构

+ 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。包只是在类的包声明中定义的包

关于java - 将 Jar 文件与 -classpath JAVA 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15131498/

相关文章:

java - 如果 @SuppressWarnings 抑制的 Checkstyle 规则违规未抑制任何内容,则发出警告

java - 多维数组相乘

java - 读取 BufferedReader 的内容时出现 NullPointerException,尽管它不为空

java - 致命[主要] org.apache.hadoop.mapreduce.v2.app.MRAppMaster:启动MRAppMaster java.lang.NoClassDefFoundError时出错

java - 尝试使用 java.exe -jar 运行我的 jar 时出现 NoClassDefFoundError...出了什么问题?

java - 异常 - NoClassDefFoundError : org. apache.xml.security.Init

java - 排序映射<Integer,List<Double>>

java - 类级别未使用的传递依赖分析

java - Jar 可在 Windows 中运行,但不能在 Linux 中运行

java - 我可以在哪里放置我的 java 库,以便它们在使用 javac 时始终位于类路径中?