Skip to main content

manifest classpath + taglib jars + Tomcat = FAIL


I found an interesting side-effect of using manifest classpaths in our application jar files as it applies to taglib jar dependencies and embedded Tomcat 6.

·         Manifest classpaths do not appear to be expanded in the URLClassLoaders that load the jars with the manifests, so only the jar file referenced directly on the classpath are included in its URLs. The taglib search mechanism in Tomcat 6 (haven't checked Tomcat 7 to see if there's a difference) only walks the classpath looking for URLClassLoaders, looking at the underlying JAR URLs. Thus, if the taglib jar is referenced only as a dependency in the manifest of the main jar file and is not specifically on the classpath, it will not be spotted and use of that taglib by the JSP engine will throw an exception.

This problem won’t actually show up in tests as IDE environments and builds generally include all the jar files in the classpath, so this one will bite you at runtime.

The workaround for this is to include taglib jar files specifically on the classpath, which is something that using the manifest classpath is supposed to help avoid.

Le sigh.

Comments

Popular posts from this blog

Groovy and String Comparisons

Though I've recently come to love working with Groovy, I'm deep enough where I'm starting to see some of its warts. The one that hit me nearly right away was the nastiness about groovy.lang.GString not extending java.lang.String .  This is mainly the fault of the latter being final and not extendable, but it mea ns that GString in stances aren't automatically comparable with plain Java strings. In Groovy, string literals can be quoted using both single and double-quotes.  GString appears when you use double-quotes around a string and expand variables into it.  See " Strings and GStrings " for more information.

Java command line app with Spring and Gradle

Many Java developers have had to build a command line app for one reason or another over the years, and there are many(!) ways to do it.  There are a bevy of command line libraries, some people roll their own when they get to this point (which is one reason why there are so many command line libraries!), and others just pull in the arguments simply and directly, eschewing a library. However, writing a tool, a developer should just focus on the meat of the problem rather than having to worry about the enabling functionality that allows it to work.  The Spring Framework very much supports this approach to development with its inversion of control (IoC) container and a myriad of other features. To support that approach for command line applications, the spring-cmdline library provides a bridge between the Spring framework and the JOpt Simple command line library. This tutorial will show how to leverage the spring-cmdline library to stand up a very simple command line ap...

Family budget crisis prompts parents to cut back on work?

Minnesota's Governor Tim Pawlenty has previously used a state-as-family metaphor , saying that when a family is stuck with a budget deficit, they have no choice but to tighten their belts.  This is not quite true, as it ignores the income side of the equation.  Most families I know have tried to acquire more jobs or longer hours in order to increase income.  Some have even invested in something that might pay off in higher income, like going back to school to finish a degree or get additional training.  Looking only at decreasing expenses is considering only half of the problem. The good news is that Governor Pawlenty now agrees that taxes may enter into the equation.  The bad news is that he's taken a George W. Bush approach to it, advocating lowering taxes to bring Minnesota out of its current financial mess.  My mind boggles at the logic.