You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetBeans15 Ant项目升级JDK17.0.8遇factory已定义错误

问题背景

将基于NetBeans 8.1 + JDK 1.8的Ant项目升级到NetBeans 15 + JDK 17.0.8环境时,触发以下错误:

Java Version Found..17.0.8 java.lang.Error: factory already defined at java.base/java.net.URL.setURLStreamHandlerFactory(URL.java:1228)

系统信息
Operating System        = Windows Server 2019 version 10.0 running on amd64
Java; VM; Vendor        = 17.0.8; Java HotSpot(TM) 64-Bit Server VM 17.0.8+9-LTS-211; Oracle Corporation
Runtime                 = Java(TM) SE Runtime Environment 17.0.8+9-LTS-211
Java Home               = C:\\Program Files\\Java\\jdk-17
System Locale; Encoding = en_US (asgraphicruleside); Cp1252
Boot & Ext. Classpath   =
Application Classpath   = C:\\Program Files\\NetBeans-15\\netbeans\\platform\\lib\\boot.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\lib\\org-openide-modules.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\lib\\org-openide-util-lookup.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\lib\\org-openide-util-ui.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\lib\\org-openide-util.jar
Startup Classpath       = C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\asm-9.3.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\asm-commons-9.3.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\asm-tree-9.3.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\core-base.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\core.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\org-netbeans-libs-asm.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\org-openide-filesystems-compat8.jar;C:\\Program Files\\NetBeans-15\\netbeans\\platform\\core\\org-openide-filesystems.jar;D:\\JAVA_17\\build\\cluster\\core\\locale\\core_asgraphicruleside.jar
警告信息

run.run:

2023年8月22日 晚上10:57:02 org.netbeans.ProxyURLStreamHandlerFactory register
严重: 无法找到jar协议的原始流处理器
java.lang.reflect.InaccessibleObjectException: 无法使字段 transient java.net.URLStreamHandler java.net.URL.handler 可访问: 模块 java.base 未向未命名模块 @27973e9b "opens java.net"
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
at org.netbeans.ProxyURLStreamHandlerFactory.register(ProxyURLStreamHandlerFactory.java:59)
at org.netbeans.JarClassLoader.<clinit>(JarClassLoader.java:117)
at org.netbeans.MainImpl.execute(MainImpl.java:153)
at org.netbeans.MainImpl.main(MainImpl.java:60)
at org.netbeans.Main.main(Main.java:58)
错误日志
检测到Java版本..17.0.8
java.lang.Error: factory already defined
at java.base/java.net.URL.setURLStreamHandlerFactory(URL.java:1228)
at org.eclipse.osgi.framework.internal.core.Framework.installURLStreamHandlerFactory(Framework.java:1765)
at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:232)
at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.internalInit(EquinoxLauncher.java:67)
at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.init(EquinoxLauncher.java:37)
at org.eclipse.osgi.launch.Equinox.init(Equinox.java:178)
at org.netbeans.modules.netbinox.Netbinox.init(Netbinox.java:63)
at org.netbeans.core.netigso.Netigso.prepare(Netigso.java:146)
at org.netbeans.NetigsoHandle.turnOn(NetigsoHandle.java:115)
at org.netbeans.ModuleManager.enable(ModuleManager.java:1445)
at org.netbeans.ModuleManager.enable(ModuleManager.java:1254)
at org.netbeans.core.startup.ModuleList.installNew(ModuleList.java:316)
at org.netbeans.core.startup.ModuleList.trigger(ModuleList.java:252)
at org.netbeans.core.startup.ModuleSystem.restore(ModuleSystem.java:298)
at org.netbeans.core.startup.Main.getModuleSystem(Main.java:173)
at org.netbeans.core.startup.Main.getModuleSystem(Main.java:142)
at org.netbeans.core.startup.Main.start(Main.java:299)
at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:98)
at java.base/java.lang.Thread.run(Thread.java:833)

警告 [org.netbeans.core.modules]: 在com.adminserver.asgraphicrulesidemodule中使用OpenIDE-Module-Class: Loader已过时。
已尝试的解决方法
  • 在类路径中添加参数:--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
  • 针对JDK17兼容性,更新Spring、Jakarta及Maven版本
  • 将NetBeans模块更新至NetBeans15支持的版本
解决方案
  1. 补充JVM参数解决反射访问限制
    在现有--add-opens参数基础上,添加--add-opens=java.base/java.net=ALL-UNNAMED和--add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED,解决jar协议流处理器的反射访问问题。

  2. 禁用重复的URLStreamHandlerFactory注册
    添加系统属性-Dorg.netbeans.core.Netigso.disableClassPathUrlHack=true,阻止NetBeans的JarClassLoader与Eclipse OSGi框架重复注册URLStreamHandlerFactory。

  3. 清理过时模块配置
    删除com.adminserver.asgraphicrulesidemodule模块中的OpenIDE-Module-Class: Loader配置,改用NetBeans 15推荐的模块加载方式。

  4. 升级Ant版本
    将Ant升级到1.10.12及以上版本,确保与JDK17完全兼容,同时检查Ant脚本中是否存在手动注册URLStreamHandlerFactory的代码并移除。

内容的提问来源于stack exchange,提问作者AMEER HUSSAIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:18:10