【问题标题】:Java - Run multiple packages programJava - 运行多包程序
【发布时间】:2021-02-26 15:00:38
【问题描述】:

我正在尝试为 java 客户端/服务器程序构建 MakeFile。

我有这样的路径:

    • 服务器
      • CServer.java
    • 客户端
      • CClient.java
    • 共享
      • SharedClass.java

客户端和服务器都使用这样的共享包:

import Shared.SharedClass;
...
  SharedClass mysharedobject = (SharedClass)UnicastRemoteObject.exportObject(anobject, 0);

我的makefile很简单

all: compile test

compile :
    mkdir -p bin
    javac -d bin src/**/*.java

test:
    java -classpath bin Server.CServer &
    java -classpath bin Client.CClient &

但我在运行服务器时收到 ClassNotFoundException : Shared.SharedClass。

当所有java文件都在同一个包中时它可以工作,但我想将它分开。

有没有办法在同一个文件夹中编译所有文件或在不同文件夹中正确运行类文件。

编辑: 我在尝试运行构建的 jar 时遇到同样的错误

【问题讨论】:

    标签: java makefile


    【解决方案1】:

    这是不对的:

    javac -d bin src/**/*.java
    

    make 总是运行/bin/sh,而/bin/sh 是一个 POSIX shell。 POSIX 没有定义像** 这样的“增强”通配符来搜索所有子目录。如果您将此添加到您的食谱中:

    ls src/**/*.java
    

    您将看到正在编译的文件列表。如果您需要搜索多个子目录,则必须使用find,例如:

    javac -d bin $$(find src -name \*.java)
    

    【讨论】:

    • 因为我只有我写的 3 个子目录,我想它会做同样的事情吗? ls 正确显示 src/Server/CServer.java src/Client/CClient.java src/Shared/SharedClass.java
    • 我尝试换行,但结果相同
    • 如果您没有任何子子目录,那也没关系。在这种情况下,您应该只使用src/*/*.java 而不使用**。但是,无论如何,这不是你的问题,你的问题与 make 或你的 makefile 无关。
    猜你喜欢
    • 2018-03-12
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2016-05-19
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多