gpt4 book ai didi

java - 从 shell 运行依赖于其他类的 java 程序

转载 作者:行者123 更新时间:2023-12-02 10:14:48 25 4
gpt4 key购买 nike

比如说,目录结构如下所示:

src/
- A.java
- A_b.java
- A_c.java

对于初学者/业余阶段,不使用像 maven 或 gradle 这样的构建系统,甚至很少构建 jar 来打包所有类并使其可导出。

A_b.java的内容:

public class A_b {
public static void writeWords() {
System.out.println("words");
}
}

A_c.java的内容:

public class A_c {
public static void writeMoreWords() {
System.out.println("more words");
}
}

A.java的内容:

public class A {
public static void main(String[] args) {
String name = "anonymous";
for (int i = 0; i < args.length; i++)
if (args[i].equals("-name"))
name = args[i+1];

System.out.println(String.format("Hello, %s!", name));
System.out.println("Now A_b will write some words:");
A_b.writeWords();
System.out.println("Now A_c will write some more words:");
A_c.writeMoreWords();
}
}

当我尝试这样做时:

$ ls
data src
$ javac src/A.java

我收到一条错误消息:

src/A.java:11: error: cannot find symbol
A_b.writeWords();
^
symbol: variable A_b
location: class A
src/A.java:13: error: cannot find symbol
A_c.writeMoreWords();
^
symbol: variable A_c
location: class A
2 errors
^

最佳答案

原因是编译器不知道编译 A.java 还需要哪些其他文件 - 这称为类路径。默认情况下,大多数版本的编译器都会将驻留在同一级别的所有 java 文件视为类路径的一部分,这就是这样做的原因:

$ cd src
$ javac A.java

但这并不

$ java src/A.java

现在,为了确保我们可以从顶层开始工作,我们需要确保类路径设置正确。

实现此目的的一种方法是明确每个依赖项,如下所示:

$ javac -cp . src/A.java src/A_b.java src/A_c.java

或者,这也有效:

$ javac -cp . src/*.java

还有CLASSPATH可以在调用 javac 之前设置环境变量,如下所示:

$ CLASSPATH=$(pwd)/src javac src/A.java 

要获取在当前工作目录中创建的 *.class 文件,我们有 -d 标志:

$ CLASSPATH=$(pwd)/src javac -d . src/A.java 

然后,很容易运行它:

$ java A -name world
Hello, world!
Now A_b will write some words:
words
Now A_c will write some more words:
more words

关于java - 从 shell 运行依赖于其他类的 java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54760249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com