【问题标题】:Mix --class-path and --module-path in javac (JDK 9)在 javac (JDK 9) 中混合 --class-path 和 --module-path
【发布时间】:2018-09-07 08:15:06
【问题描述】:

我尝试关注这个question,但它对我不起作用。 我想编译 1 个模块(不需要任何其他模块或 jar)以及其他使用该模块并将位于未命名模块中的类。

javac -cp lib\* --module-path modules --add-modules simpleModule -d out @classes.txt

运行此命令后,我得到“包 org.... 不存在”。但是这个包的jar在lib目录中

lib - 包含我的 library-jars 的目录

modules - 此文件夹包含带有 module-info.java 的模块“simpleModule”

@classes.txt - 所有要编译的类列表(包括模块化和非模块化)。操作系统 - Windows

当我从 simpleModule 中删除 module-info.java 时,一切都编译得很好。

【问题讨论】:

  • 另一个问题讨论了引用 lib/*,但我实际上想知道* 是否曾经扩展javac 可能不会这样做,它必须在命令执行之前进行扩展。我无法告诉你任何关于 Windows 上的 * 扩展的信息……
  • @StephanHerrmann lib/* - 这对我来说适用于 Windows。它将lib 目录下的所有 jars 带到类路径。正如我所提到的,当我删除 module-info.java--add-modules simpleModule 时,它会将 simpleModule 下的类视为非模块化并且编译没有问题
  • 我发现“在这种编译模式下,可以将任意类和 JAR 文件放在类路径上,但不建议这样做,因为这相当于将这些类和 JAR 文件视为模块的一部分正在编译。”这里openjdk.java.net/jeps/261#Compile-time有人可以解释一下吗?

标签: java classpath java-9 java-platform-module-system module-path


【解决方案1】:

老问题,但我最近在使用模块和非模块 jar 进行项目时遇到了一个相关问题。根据您的示例命令行,如果您的模块位于 jar 中,请使用以下命令行:

javac -cp lib\*.jar -d out @classes.txt

如果模块不在jar 中,意思是展开的目录,这将是命令:

javac -cp mods\moduled.in.question -d out @classes.txt

我使用 JDK 11.0.1 测试了上述内容。

【讨论】:

    猜你喜欢
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    相关资源
    最近更新 更多