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