代码之家  ›  专栏  ›  技术社区  ›  instanceof me

当Spring.jar位于WEB-INF/lib/而不是classpath中时,Jetty上的奇怪Spring行为

  •  1
  • instanceof me  · 技术社区  · 15 年前

    1. 当SpringJAR位于类路径(我的意思是在“运行配置”的“类路径”选项卡中配置)和外部(不是在WEB-INF/lib中)时,一切正常。
    2. 但是当我将spring.jar(或所有spring jar)放在WEB-INF/lib/目录(+在类路径中引用)中时,问题就开始了。我尝试了Jetty的两种价值观 parentLoaderPriority :
      1. 当parentLoaderPriority为 true ,我收到Xerces的投诉,说它无法验证spring.xml的XSD(因此我猜Jetty嵌入的Xerces的不同版本与我的版本相冲突)
      2. 当parentLoaderPriority为 false ,属性占位符不再工作,而且(我尝试用直接值替换)Spring也无法将HttpInvokerProxy转换为正确的接口,就像缺少一些类一样
    3. 父母优先权 .

    不过,方法3在Tomcat中运行良好。所以我猜这个jetty启动器有一些类加载配置我做错了?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Kevin Wright    15 年前

    听起来您的应用程序正在使用“外部”类路径上的某些东西(我称之为X)并向其传递引用;这很好,因为“外部”位于应用程序的父类加载器中。

    “X”然后使用引用对spring进行处理。但是,spring位于应用程序的类路径上,而X位于外部类路径上。因此,弹簧对X不可见,因此存在错误。

    至于“X”是什么?最有可能的候选人是commons logging,它有很长的使用类装入器的历史。您可能需要考虑使用SLF4J实现(类似于回退),并通过JCL OFF—SLF4J提供共享日志记录接口。