Java 在Tomcat中使用系统类加载器加载类

Java 在Tomcat中使用系统类加载器加载类,java,tomcat,classloader,Java,Tomcat,Classloader,我需要为运行在Tomcat中的应用程序提供RMIClassLoaderSpi的自定义实现。但是,似乎需要使用系统类加载器加载此类 有没有人知道一种好方法可以向Tomcat提供一个类,这样就可以使用系统类加载器来加载它 我知道我可以设置shared.loader和server.loader属性,但据我所知,它们不会影响系统类加载器 如果有人感兴趣,下面是强制在RMIClassLoader中使用系统类加载器的代码: Class providerClass = Class.fo

我需要为运行在Tomcat中的应用程序提供RMIClassLoaderSpi的自定义实现。但是,似乎需要使用系统类加载器加载此类

有没有人知道一种好方法可以向Tomcat提供一个类,这样就可以使用系统类加载器来加载它

我知道我可以设置shared.loader和server.loader属性,但据我所知,它们不会影响系统类加载器

如果有人感兴趣,下面是强制在RMIClassLoader中使用系统类加载器的代码:

Class providerClass =
            Class.forName(providerClassName, false,
                  ClassLoader.getSystemClassLoader());

其中providerClass是我的RMIClassLoaderSpi自定义实现的名称。

进一步研究,我似乎可以修改setenv.sh来设置CLASSPATH变量,然后将其传播到系统类路径

来自catalina.sh:

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi
看来这是我们想要的方法