-
Notifications
You must be signed in to change notification settings - Fork 1
DevFaqClassLoaders
This FAQ item should be a companion to the main classpath documentation. Please refer to the original document for additional details.
There are basically three main class loader types used in the platform.
Most code is loaded by module class loaders.
In special cases the "system" class loader can be used,
when you need access to resources from unknown modules.
Resources directly on the classpath from the launch script (mainly platform*/lib/.jar
)
are loaded by the application loader.
(There are also bootstrap and extension loaders in the JRE,
and the platform has a special loader for a couple of JARs in platform/core/*.jar
.)
Most of the class loaders in the NetBeans platform are multi-parented class loaders.
This means that the class loader can have zero or more parents.
org.netbeans.ProxyClassLoader
implements the search across multiple parents.
Every module loaded by the module system has its own class loader. This loader loads resources primarily from the module’s JAR. The application loader is an implicit parent of each module loader.
The module loader is able to load from additional JARs (besides delegating to various parents):
-
extensions - anything listed in the manifest attribute
Class-Path
of the module JAR -
locale extensions - JARs placed in a subdirectory
locale
relative to the original module JAR position, named by appending a locale suffix to the original name -
patches - JARs placed in a subdirectory
patches/code-name-base
relative to the original JAR position (can override module classes)
The implementation class is org.netbeans.StandardModule$OneModuleClassLoader
.
The "system" loader loads no resources on its own,
but has as its parents all enabled module’s class loaders.
It is accessible via Lookup.getDefault().lookup(ClassLoader.class)
or by using the fact that it is the context loader on all threads by default: Thread.currentThread().getContextClassLoader()
This class loader is set up by the launch script (or by javaws
if running in JNLP mode).
It can load classes from lib/*.jar
in specified clusters.
It is generally discouraged to use this loader for your own classes,
but it is sometimes needed e.g. for Look & Feel classes
(which must be loaded very early during the startup sequence).
Take a very simple module a
:
Manifest-Version: 1.0
OpenIDE-Module: org.netbeans.modules.a
and module b
depending on a
:
Manifest-Version: 1.0
OpenIDE-Module: org.netbeans.modules.b
OpenIDE-Module-Module-Dependencies: org.netbeans.modules.a
Class-Path: ext/library-b-1.1.jar
Classes in org-netbeans-modules-a.jar
will be loaded in a’s module class loader.
Classes in both `org-netbeans-modules-b.jar
and library-b-1.1.jar
will be loaded in b’s module loader,
and can refer to classes in `org-netbeans-modules-a.jar
.
<hr/> Applies to: NetBeans 6.8 and above
The content in this page was kindly donated by Oracle Corp. to the Apache Software Foundation.
This page was exported from http://wiki.netbeans.org/DevFaqClassLoaders , that was last modified by NetBeans user Rmichalsky on 2009-12-02T13:43:15Z.
NOTE: This document was automatically converted to the AsciiDoc format on 2018-01-26, and needs to be reviewed.
Apache NetBeans is an effort undergoing incubation at The Apache Software Foundation (ASF).
Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects.
While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
This wiki is an experiment pending Apache NetBeans Community approval.