> The custom class loader approach described in one of the answers is a > viable option.
Thanks. > No. The same class loader hierarchy isn't constructed when running in > embedded mode. It looks like I would need to replicate all the classloading capabilities of Tomcat (e.g. loading classes from files and JARs). Any tips for implementing this? It looks like the Tomcat classloader code is available via https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina. This isn't a tomcat-embedded module, but looks like it might be compatible. Could these classes be used to achieve what I'm after? If I could get this working, I could maybe contribute back with "how-to" documentation. Thoughts? Also, how do I make embedded Tomcat use my classloader? On Wed, Dec 14, 2022 at 9:19 PM Mark Thomas <ma...@apache.org> wrote: > 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 > >