You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译依赖模块化代码的非模块化Java代码遇错求助

问题分析与解决

第一个命令报错error: no source files的原因

你执行的命令:

javac -p simple-modules -d output  -cp normal-java-packages

未指定要编译的源文件路径。-cp参数用于指定编译时依赖的类文件路径,而非源文件路径。javac需要明确接收待编译的.java文件路径,比如用通配符匹配目标目录下的所有源文件。

第二个命令报包不可见的原因

你执行的命令:

javac -p simple-modules -d output classpath_entry/com/myuser/modules/main/MainApp.java

存在两个核心问题:

  1. 路径不匹配:你指定的源文件路径是classpath_entry/...,但实际非模块化源码存于normal-java-packages目录,路径错误导致javac无法识别依赖上下文。
  2. 自定义模块未被纳入模块图:非模块化代码属于unnamed module,默认情况下javac不会自动将模块路径下的自定义模块(hellomodule、greetings)加入模块图。即便用-p指定了模块路径,也需要通过--add-modules显式声明要依赖的模块,同时要确保这些模块已通过exports关键字对外暴露了非模块化代码需要导入的包。

正确的编译命令示例

假设非模块化源码都在normal-java-packages下,依赖的模块为hellomodule和greetings,正确命令如下:

# 编译单个源文件
javac -p simple-modules --add-modules hellomodule,greetings -d output -cp normal-java-packages normal-java-packages/com/myuser/modules/main/MainApp.java

或用通配符编译所有非模块化源文件:

javac -p simple-modules --add-modules hellomodule,greetings -d output -cp normal-java-packages normal-java-packages/**/*.java

额外注意事项

  • 确保simple-modules下的模块(module1、module2)的module-info.java中,已用exports对外暴露所需包,示例:
    module hellomodule {
        exports com.myuser.hello;
    }
    
  • -cp normal-java-packages用于让javac识别非模块化代码内部的依赖类(若有),若无内部依赖可省略,但建议保留以避免潜在问题。

内容的提问来源于stack exchange,提问作者GionJh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:15:48