gpt4 book ai didi

javac:如何编译多个目录中的多个类?

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:57 32 4
gpt4 key购买 nike

我正在尝试创建一个客户端-服务器架构,并且我只想使用 javac 来编译我的代码。我想要这些目录树:

/Project/Server/src/Server.java
/ClientConnection.java
/bin/Server.class
/ClientConnection.Class

/Global/src/Constants.java
/Packet.java
/bin/Constants.class
/Packet.Class

/Client/src/(it doesn't matter at the moment)
/bin/(it doesn't matter at the moment)

我想在服务器中而不是在客户端中使用 Constant 和 Packet 类,但使用 javac 我无法做到这一点。我真的不明白包和 import 关键字是如何工作的。例如我不明白为什么下面的代码是错误的:

小型服务器代码段:

import Global.src.Constants;
import Server.src.*

public class Server extends ThreadPoolExecutor{
private Iterator<ClientConnection> iterator;
private NodeServer[] map;
private ServerSocket listener;
private ArrayList<ClientConnection> clients;
private HashSet<ClientConnection> clientsDisconnected;

编译命令和相关错误:

javac -sourcepath ~/Documenti/Project Server.java

Server.java:1: error: cannot access Constants
import Global.src.Constants;
^
bad source file: /home/francesco/Documenti/Project/Global/src/Constants.java
file does not contain class Global.src.Constants
Please remove or make sure it appears in the correct subdirectory of the sourcepath.

任何人都可以帮助我获得前面描述的目录结构吗?

提前谢谢您!

Seashell 我喜欢你的解决方案,但我不明白如何应用它。我创建了 common.jar 文件,但我不知道如何导入它。此外,我还不知道是否需要创建一个包。您能给我任何澄清吗?

最佳答案

按照以下方式进行。在您的情况下,您的代码具有依赖性(服务器依赖于全局,客户端可能依赖于全局和服务器)。您需要按顺序编译内容。

javac -d Project/Global/bin Project/Global/src/*.java
javac -d Project/Server/bin -cp Project/Global/bin Project/Server/src/*

这样,全局代码将被放置在 bin 中,并在服务器编译时通过类路径使用。

如果您想使用 javac 并且源代码中有嵌套目录,则可以使用 find

find Project/Global/src "*.java" -exec javac -d Project/Global/bin {} \;

关于错误:

Server.java:1: error: cannot access Constants
import Global.src.Constants;

我猜你想要有稍微不同的源结构。例如

Project
+-Global
+-src
+-some_package

然后,在 Constants.java 中你可以放入

/* Constants.java */

package some_package;

public class Constants { ... }

然后,在您要导入的代码中

import some_package.Constants;

关于javac:如何编译多个目录中的多个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45356851/

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