javac-Use——补丁模块和未命名的模块类

javac-Use——补丁模块和未命名的模块类,java,javac,java-9,java-platform-module-system,java-module,Java,Javac,Java 9,Java Platform Module System,Java Module,我有以下目录结构: src +- java.base +- java +- lang +- Object.java +- java.logging +- java +- util +- logging +- FileHandler.java +- com +- example +- MyClass.java Object、

我有以下目录结构:

src
  +- java.base
     +- java
        +- lang
            +- Object.java

  +- java.logging
     +- java
        +- util
            +- logging
                +- FileHandler.java

  +- com
     +- example
        +- MyClass.java
Object
FileHandler
MyClass
可以相互交叉引用

为了编译这些,我尝试运行(在
src
目录中):

但这会导致错误:

error: too many patched modules (java.base,java.logging), use --module-source-path
然后我试着:

javac  --patch-module java.base=java.base \
  --patch-module java.logging=java.logging \
    --module-source-path . \
      $(find . -name *.java)
然后我得到一个错误:

error: not in a module on the module source path package com.example;
那么我怎样才能编译这些文件呢


供参考:

  • 假设javac在
    src
    目录中运行
  • java.base
    java.logging
    中的类可以引用
    com.example
  • 我知道如何使用
    --addreads
    标志来打破封装。我想要的是能够编译没有上述两个错误

我相信
——补丁模块
需要指向已编译的类,而不是源代码树。@AlanBateman我想你的意思是
,而不是
=
。但是这些补丁类也引用com.example中的类,我认为您需要两个javac命令,一个用于编译补丁,另一个用于编译com.example中的代码。首先,您的命令看起来不错,但如果对象类中有对FileHandle的引用,则可能需要--add reads java.base=java.logging。
error: not in a module on the module source path package com.example;