jlink 是否仍然需要混淆(即反编译器可以在模块文件上 运行 )?

Does jlink still require obfuscation (i.e. can a decompiler be run on the modules file)?

在 Java 8 中,我需要为应用程序混淆 jar/class 文件。我正在将此应用程序迁移到 Java 10,并且我也在更新构建过程以使用模块,这样我们就不必提供完整的 JRE。

当我用模块编译 (javac) 然后构建我的精简 JRE (jlink) 时,我注意到 dist/lib/modules 文件是包含我的编译代码的文件。但是,当我检查 dist/lib/modules 时,这个文件不是 ZIP 文件,我的代码看起来也不可见。

有没有办法反编译dist/lib/modules?我应该在调用 jlink 之前混淆我的 *.class 文件吗?

这是我的构建流程示例:

javac -d my_module/out $(find my_module/src -name *.java)
jar cf libs/my_module-1.0.jar -C my_module/out .
javac -d out -p 'libs/my_module-1.0.jar' \
  src/module-info.java src/application/Main.java
jlink -p $JAVA_HOME/jmods:libs --add-modules com.application \
  --launcher start-application=com.application \
  --strip-debug --compress=2 \
  --output small-dist

jlink 不做任何混淆。要提取模块,您可以使用 "jimage extract"(参见