如何使用--patch-module和--class-path | javac的

时间:2018-03-08 14:51:10

标签: java javac java-9 jigsaw java-module

如何在非模块化代码库中覆盖本地类(如java.util.regex.Matcher)时使用自定义类路径。

基本上我想要做的是在修补类时使用不同的类路径,如--class-path build/custom。因为修改后的Matcher.java引用了编译为build/custom的类。

即:

说我已经修改了java.util.regex.Matcher,现在它需要一些其他(非java)external.jar来运行。

那么我该如何修补它: javac --patch-module java.base=src,因此它也会在external.jar中找到类。

原始案例

目录结构:

+- build  
+- src
     +- PATCH
          +- java
             +- util
                +- regex
                      +- Matcher.java

     +- CUSTOM
          +- com
             +- example
                  +- MyClass.java

两个课程如下:

java.util.regex.Matcher中:

package java.util.regex;

class Matcher {
        com.example.MyClass myClass;
}

com.example.MyClass:

package com.example;    

public class MyClass {
}

案例#1

这有效:

javac -d build src/CUSTOM/com/example/MyClass.java
javac -d build --patch-module java.base=src src/PATCH/java/util/regex/Matcher.java

案例#2

但是,如果我将MyClass编译为自定义构建路径,如(-d build/custom

javac -d build/custom src/CUSTOM/com/example/MyClass.java
javac -d build --class-path build/custom --patch-module java.base=src src/PATCH/java/util/regex/Matcher.java

导致错误:

src/Matcher.java:4: error: package com.example does not exist
        com.example.MyClass myClass;
                   ^
1 error

测试回购

我创建了一个测试仓库:https://github.com/gayanW/compile-this-1

..如果有人可以花些时间尝试我的命令(复制粘贴会这样做)。它具有与上面相同的目录结构。

如果你能告诉我如何在那里编译这两个类,那就足够了。但是,唯一的要求是MyClass.class应该放在build/CUSTOM中,而Matcher.class应放在build/PATCH目录中。

注意:

  • 这仅用于测试目的,不会用于生产。

0 个答案:

没有答案