Gay*_*tti 5 java javac java-platform-module-system java-9 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
Run Code Online (Sandbox Code Playgroud)
两个类如下:
java.util.regex.Matcher:
package java.util.regex;
class Matcher {
com.example.MyClass myClass;
}
Run Code Online (Sandbox Code Playgroud)
com.example.MyClass:
package com.example;
public class MyClass {
}
Run Code Online (Sandbox Code Playgroud)
情况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
Run Code Online (Sandbox Code Playgroud)
案例#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
Run Code Online (Sandbox Code Playgroud)
它会导致错误:
src/Matcher.java:4: error: package com.example does not exist
com.example.MyClass myClass;
^
1 error
Run Code Online (Sandbox Code Playgroud)
我创建了一个测试仓库:https ://github.com/gayanW/compile-this-1
..以防有人能抽出时间来尝试我的命令(复制粘贴即可)。它的目录结构与上面的相同。
如果你能告诉我如何编译其中的两个类,那就足够了。然而唯一的要求是MyClass.class应该进入 build/CUSTOM而Matcher.class应该进入build/PATCH目录。
笔记:
| 归档时间: |
|
| 查看次数: |
5319 次 |
| 最近记录: |