On 14/12/2022 03:20, Tim N wrote:
I'm currently using embedded Tomcat 9.0.68 and have encountered the
infamous compatibility issue with ClassLoader.getSystemClassLoader when
upgrading from Java 8 to Java 17.
See
https://stackoverflow.com/questions/46694600/java-9-compatability-issue-with-classloader-getsystemclassloader
for a good summary.
The custom class loader approach described in one of the answers is a
viable option.
Is it possible to utilise and modify the Tomcat classloader hierarchy for
embedded Tomcat to add to the classpath, specifically:
- Add some shared libraries as done with the 'shared.loader' for Tomcat
for production and development environments
No. The same class loader hierarchy isn't constructed when running in
embedded mode.
- Add another module's classes to the classpath for a web-app for
development environment only (e.g. add "../sub-module/target/classes" to
classpath)
Yes. Each web application still retains its own class loader. You
configure the web application resources to map static resources, JARs
and/or directories of classes to the right place in your web app.
For example (totally untested but should give you the idea):
Tomcat tomcat = new Tomcat();
Context context = tomcat.addContext("", "/some/path");
WebResourceRoot root = context.getResources();
DirResourceSet extraJARs = new DirResourceSet(root,
"/WEB-INF/lib", "/path/to/extra/jars", "");
root.addPostResources(extraJARs);
In Java 8 I can achieve this by calling 'addURL' on 'URLClassLoader', but
that is no longer possible in Java 9+.
Is there any official documentation for this?
The docs for configuring this in context.xml are here:
https://tomcat.apache.org/tomcat-9.0-doc/config/resources.html
Javadoc for doing it directly is here:
https://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/webresources/package-summary.html
HTH,
Mark
-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org