在Tomcat上将servlet部署为共享jar库时出现路径问题

在Tomcat上将servlet部署为共享jar库时出现路径问题,tomcat,servlets,logback,Tomcat,Servlets,Logback,我以War文件的形式开发并测试了一个应用程序,在游戏后期,DevOps公司规定我正在开发的应用程序将作为共享Jar文件进行部署。部署环境是Windows Server 2008R2上的Tomcat6 web应用程序的多个(~100)实例作为单独的Tomcat实例运行。我试图解决的问题是,一旦应用程序jar从实例库移动到tomcat库,应用程序就无法找到我的日志配置文件logback.xml。看起来有点像这样: /root/tomcat6/ bin/ lib

我以War文件的形式开发并测试了一个应用程序,在游戏后期,DevOps公司规定我正在开发的应用程序将作为共享Jar文件进行部署。部署环境是Windows Server 2008R2上的Tomcat6

web应用程序的多个(~100)实例作为单独的Tomcat实例运行。我试图解决的问题是,一旦应用程序jar从实例库移动到tomcat库,应用程序就无法找到我的日志配置文件
logback.xml
。看起来有点像这样:

/root/tomcat6/
          bin/
          lib/
              myapp.jar
          conf/
          ...  
      myapp_inst1/
          myapp.properties  <-- yes, this is an odd place for props
          bin/
              installmyapp.bat  <-- custom scripts to install and run as win service
              startmyapp.bat        and set catalina home and work
              stopmyapp.bat
          conf/
              web.xml
              server.xml <-- port, etc., changed for instance
          webapp/
              ROOT/
                  WEB-INF/
                      lib/  <-- empty!
                      classes/
                          logback.xml
                      web.xml <-- refers to servlet class in myapp.jar                          
      myapp_inst2/
          ...
      myapp_inst3/
          ...
/root/tomcat6/
垃圾箱/
解放党/
myapp.jar
形态/
...  
myapp_inst1/

myapp.properties将您的webapp部署为共享jar听起来不是个好主意。背后的理由是什么

你可以做的是把它分成两个罐子。一个jar用于放置在
tomcat/lib
下的公共库内容,另一个jar用于放置在webapp的
WEB-INF/lib
下的特定于应用程序的内容(如
logback.xml
文件)


另请参见(哦,我刚才注意到它也是您发来的:)。

您的应用程序jar应该位于WEB-INF/lib下。不在Tomcat的类路径中。您已经回答了问题的第一部分。标准类加载器层次结构将工作委托给父方向,而不是相反的方向。如果您想这样做,您必须使用自己的自定义类加载器。我想问的是,这是否真的是一种等级制度,并且只在一个方向上起作用——我想你刚刚回答了这个问题。我不确定。现在我必须想办法解决这个问题。@jb nizet我原则上同意app jar应该在WEB-INF/lib中,但正如我所说的,在这方面我别无选择。这个应用程序在tomcat/lib中使用jar确实可以运行,但是这个日志文件配置是我最不需要弄清楚的。这很让人恼火,但这是由DevOps驱动的,DevOps似乎是我公司唯一听过的组。我们有一个服务器,它运行着这个应用程序的100多个实例,每个实例都在它自己的tomcat实例中。DevOps希望能够在机器上交换一个jar文件,以同时更新所有100多个实例。我们确实需要100多份logback.xml副本,但它不在jar中-似乎是我的漂亮图表:)哈哈,是的,我曾经问过一次,以了解发生了什么,但我对“移动jar”答案和类似的结构更改持开放态度。在这一点上,我的结构是蚀刻在石头上的,我必须找出如何使这些属性可见的具体方法。我希望在类路径上有一些tomcat的魔力(tomcat似乎有很多角落案例配置选项)或者(呃)滚动我自己的类加载器。啊,好吧,我明白了,
logback.xml
不在jar中。为什么我建议在
WEB-INF/lib
下创建指向公共JAR的符号链接不起作用(我的另一个答案)?这实际上也是我们针对其他应用程序的“标准”部署模型。我对这家公司还很陌生,这种想法让我很为难,但基本上,DevOp的主要负责人与我们的CTO成功地争辩说,将符号链接到web应用程序容器中是“糟糕的工程”。我试着不让自己被这种讽刺窒息。也许你可以试着使用上下文选择器,就像这里描述的那样:我自己从来没有试过。你也可以让你的DevOp解决这个问题,因为他非常擅长“工程”;)