diff --git a/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java b/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java index 20547e1db..a033e3ed8 100644 --- a/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java +++ b/sofa-boot-project/sofa-boot/src/main/java/com/alipay/sofa/boot/util/ModuleUtil.java @@ -30,15 +30,21 @@ */ public class ModuleUtil { - private static final Logger LOGGER = SofaBootLoggerFactory - .getLogger(ModuleUtil.class); + private static final Logger LOGGER = SofaBootLoggerFactory + .getLogger(ModuleUtil.class); private static final MethodHandle implAddOpensToAllUnnamed; + private static final MethodHandle implAddOpens; + private static final MethodHandle implAddExportsToAllUnnamed; + private static final MethodHandle implAddExports; + private static final Map nameToModules; + private static boolean isExported = false; + static { implAddOpensToAllUnnamed = createModuleMethodHandle("implAddOpensToAllUnnamed", String.class); @@ -54,7 +60,7 @@ public class ModuleUtil { */ public static void exportAllJDKModulePackageToAll() { try { - if (nameToModules != null) { + if (!isExported && nameToModules != null) { nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> { if (isJDKModulePackage(pkgName)) { addOpensToAll(module, pkgName); @@ -62,7 +68,9 @@ public static void exportAllJDKModulePackageToAll() { } })); } + isExported = true; } catch (Throwable t) { + isExported = false; LOGGER.error("Failed to export all JDK module package to all", t); } } @@ -76,14 +84,15 @@ private static boolean isJDKModulePackage(String modulePackageName) { */ public static void exportAllModulePackageToAll() { try { - Map nameToModules = getNameToModule(); - if (nameToModules != null) { + if (!isExported && nameToModules != null) { nameToModules.forEach((name, module) -> module.getPackages().forEach(pkgName -> { addOpensToAll(module, pkgName); addExportsToAll(module, pkgName); })); } + isExported = true; } catch (Throwable t) { + isExported = false; LOGGER.error("Failed to export all module package to all", t); } }