java - 如何在不制作包的情况下运行具有多个类文件的java程序?

标签 java shell class

我对 Java 编程非常陌生。由于我原来的java类包含太多方法,我想将其中一些方法移动到另一个类,所以我创建了一个新类MergerHTML。

在拥有第二个类文件之前,我使用命令 "javac -cp "./lib/*:lib/*" src/AAA.java"编译并使用命令 "java -classpath "lib/*:lib/*" src/AAA.java data/*"运行程序。 我在这里已经很困惑了。如果我不输入".java"在运行命令中,消息:

"Error: Could not find or load main class src.AAA
 Caused by: java.lang.ClassNotFoundException: src.AAA"

将会出现。为什么会发生这种情况?

添加第二个类文件后。我使用命令 "javac -cp "./lib/*:lib/*" src/AAA.java src/MergerHTML.java"编译程序,没有发现错误。 但是,当我使用命令 "java -classpath "lib/*:lib/*" src/AAA.java data/*" 时,以下是产生的错误:

src/AAA.java:441: error: cannot find symbol
    MergerHTML mHTML = new MergerHTML();
    ^
    symbol:   class MergerHTML
    location: class AAA

我的主类文件如下所示:

public class AAA {
   ....
   public static void main(final String[] args) throws Exception {

       MergerHTML mHTML = new MergerHTML();
       mHTML.print();

   }
}

辅助类文件如下所示:

public class MergerHTML{
    public void print(){
        System.out.println("hiiiiii");
    }
}

最佳答案

而不是

java -classpath "lib/*:lib/*" src/AAA.java data/*

您需要指定要执行的编译类(而不是它的来源),您不需要在类路径中两次 lib/* ,但您确实需要当前文件夹(实际上,包含已编译类的文件夹,在本例中是当前文件夹)。就像(在 Windows 上将 : 更改为 ;),

java -classpath "lib/*:." AAA data/*

注意:放置类的更常规位置是 bin 文件夹(您可以将其命名为任何您喜欢的名称,但是当类全部收集在“干净”的树中)。所以,类似

mkdir bin
javac -cp "lib/*" -d bin src/AAA.java src/MergerHTML.java
java -classpath "lib/*:bin" AAA data/*

最后,如果您使用的是 Windows,上面的最后一个命令应该是

java -classpath "lib/*;bin" AAA data/*

关于java - 如何在不制作包的情况下运行具有多个类文件的java程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57683931/

相关文章:

java - 将 CMIS 结果限制从 100 增加到 1000

java - 通过PendingIntent开放应用程序并直接进行语音识别

mysql - Linux Shell 脚本在执行 mysql 脚本 shell 后捕获退出代码

linux - 使用 smbclient 删除非空目录

python - 如何让 Python Interactive Shell 打印西里尔字符?

vbscript - 是使用子类中的属性来访问父类更好,还是将父类公开更好?

arrays - 带有动态数组的 DELPHI 类在 SetLength() 中有问题

java - FocusListener 回调方法不适用于来自同一变量的单独实例化的对象?

c++ - 了解虚拟拷贝构造函数

java - 为什么 Eclipse 编辑器中的更改不会影响我的代码?