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

运行依赖于shell中其他类的java程序,java,Java,例如,目录结构如下所示: src/ - A.java - A_b.java - A_c.java 对于初学者/业余爱好者阶段,不使用maven或gradle之类的构建系统来打包所有类并使其可导出,甚至很少使用jar构建系统 A_b.java的内容: A_c.java的内容: A.java的内容: 我得到一个错误,上面写着: src/A.java:11: error: cannot find symbol A_b.writeWords(); ^ symbol:

例如,目录结构如下所示:

src/
- A.java
- A_b.java
- A_c.java
对于初学者/业余爱好者阶段,不使用maven或gradle之类的构建系统来打包所有类并使其可导出,甚至很少使用jar构建系统

A_b.java的内容:

A_c.java的内容:

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
$ CLASSPATH=$(pwd)/src javac src/A.java 
或者,这也适用于:

$ javac -cp . src/*.java
在调用javac之前,还可以设置环境变量,如下所示:

$ javac -cp . src/A.java src/A_b.java src/A_c.java
$ CLASSPATH=$(pwd)/src javac src/A.java 
要获取在当前工作目录中创建的*.class文件,我们有-d标志:

然后,很容易运行它:

$ java A -name world
Hello, world!
Now A_b will write some words:
words
Now A_c will write some more words:
more words
$ CLASSPATH=$(pwd)/src javac src/A.java 
$ 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