Java 是否配置从Tomcat中的classes文件夹而不是lib文件夹中拾取类?

Java 是否配置从Tomcat中的classes文件夹而不是lib文件夹中拾取类?,java,web-applications,webserver,tomcat6,Java,Web Applications,Webserver,Tomcat6,我在classes文件夹下有相同的类文件,在lib文件夹内的jar文件中也有相同的类文件。根据我的理解,在这种情况下,classes文件夹下的类优先于jar文件。至少这是我在玻璃鱼身上看到的行为。但这不是tomcat的行为。如果使用tomcat,我是否需要进行任何配置,以便优先选择classes文件夹下的类?我使用的是tomcat 6.0.26。规范(2.4)说: Web应用程序类加载器必须从 首先是WEB-INF/classes目录,然后从 WEB-INF/lib目录 因此,如果Tomcat首

我在classes文件夹下有相同的类文件,在lib文件夹内的jar文件中也有相同的类文件。根据我的理解,在这种情况下,classes文件夹下的类优先于jar文件。至少这是我在玻璃鱼身上看到的行为。但这不是tomcat的行为。如果使用tomcat,我是否需要进行任何配置,以便优先选择classes文件夹下的类?我使用的是tomcat 6.0.26。

规范(2.4)说:

Web应用程序类加载器必须从 首先是WEB-INF/classes目录,然后从 WEB-INF/lib目录

因此,如果Tomcat首先从jar加载,它就不符合规范

说:

因此,从web应用程序的角度来看,类或 资源加载按以下顺序在以下存储库中查找:

  • JVM的引导类
  • 系统类加载器类(如上所述)
  • /WEB应用程序的WEB-INF/类
  • /WEB应用程序的WEB-INF/lib/*.jar
  • 通用类加载器类(如上所述)
所以我很惊讶你看到这样的行为。如果您绝对确定该类不在Tomcat自己的类路径中的某个jar中,请提交错误报告。在这样做之前,还要确保清除Tomcat的工作目录,甚至从新安装的Tomcat开始


解决方法当然是重新打包jar文件以包含修改过的类,而不是依赖于类加载顺序

为什么您认为有必要在两个地方有一个.class文件?我认为这是自找麻烦。如果你把它放在一个地方,你会消除所有的困惑。实际上它是一个开源项目。我只想把我修改过的类放在classes Folder下对不起,你修改了一个开源文件,但你仍然把JAR放在你的类路径中?是这样吗?Jar也包含很多其他类。是的,我明白了。听起来像是在自找麻烦。你的修改会有什么影响?你确定它们是必要的吗?这些其他类将如何响应您的新代码?正如您所说的,如果您绝对确定该类不在Tomcat自己的类路径中的某个jar中。我应该在哪里检查类是否不在Tomcat自己的类路径中的某个jar中。很抱歉问这个问题?知道这门课会有帮助的。另外,请参见class.class.getClassLoader()返回的内容。另请查看class.class.getProtectionDomain().getCodeSource().getLocation()的结果。@JBNizet我们如何为独立应用程序实现相同的功能?@Vipin实现什么?问题是关于在webapp中加载类时使用位置的顺序。我不知道如何将这个问题翻译成一个独立的应用程序。如果你有一个特别的问题,那就把它当作一个问题来问。