Tomcat 的 Web 应用程序被包装到一个 .war 文件中并被扔到 Tomcat 中。应用程序可以使用 war 文件中的类和包含的 jar 文件。这将 Tomcat 的运行时类与应用程序类分开。
使用storm时(参见storm-project.net),没有类似的隔离。相反,推荐的方法需要创建一个“胖 jar”,表示在将所有必要的类文件从各自的 jar 中解包后包含所有必要的类文件的 jar。对于简单的情况,这是可行的,但生成的胖 jar 必须正确合并来自所有合并 jar 的所有 META-INF/* 文件,这不能半自动工作。
我不会害羞地编写自己的类加载器来模拟类似战争文件的东西。除了我不知道如何拦截加载我部署的所有类的默认类加载器。
我的理论是我的应用程序的一个类首先由默认类加载器加载。大概在它的 -static
部分我会施放魔法类加载器咒语,这样所有依赖的类都将由我自己的类加载器加载,这将如何从我认为合适的任何东西中获取必要的类。
对所描述的一般问题以及所需的特定魔法的任何提示都值得赞赏。