在eclipse中配置项目,使其在tomcat中结束;普通的;类加载器

在eclipse中配置项目,使其在tomcat中结束;普通的;类加载器,eclipse,tomcat,Eclipse,Tomcat,我有两个tomcat web应用程序,它们需要使用singleton共享信息。我已经通过将jared类放在tomcat公共目录中实现了这一点。然后,每个webapp都会获得相同的singleton副本。我想做的是在eclipse中集成这种行为。我希望公共类是一个单独的项目,每当我在eclipse中启动tomcat服务器时,它就会被合并到tomcat公共类加载器中。有人知道如何配置eclipse来实现这一点吗?可能是一种可能性,为了让类加载器在其中搜索,可以通过以下方式: 扩展org.apach

我有两个tomcat web应用程序,它们需要使用singleton共享信息。我已经通过将jared类放在tomcat公共目录中实现了这一点。然后,每个webapp都会获得相同的singleton副本。我想做的是在eclipse中集成这种行为。我希望公共类是一个单独的项目,每当我在eclipse中启动tomcat服务器时,它就会被合并到tomcat公共类加载器中。有人知道如何配置eclipse来实现这一点吗?

可能是一种可能性,为了让类加载器在其中搜索,可以通过以下方式:

  • 扩展org.apache.catalina.loader.WebappClassLoader并重写
    findClassInternal
    方法

  • 配置Tomcat以使用扩展类加载器。
    这是在Tomcat
    conf/Catalina/hostname
    路径下的相应webapp配置文件中使用以下元素完成的:

    ...

然后在eclipse中,您可以将公共项目设置为“构建路径上的必需项目”,这使其成为类路径的一部分

这意味着您的扩展类加载器必须能够查找其他类:

  • 或者在固定的预定义路径中
  • 或者在类路径中的预定义路径中
我自己没有测试过,但这可能会给你一个关于这个问题的线索


在评论中,作者提出了一个更简单的解决方案,利用了Tomcat的优点

然而,委员会:

当您在Eclipse中创建新的Tomcat服务器时,新服务器向导假定影响此新服务器将使用的Tomcat安装的当前行为是不安全的

WTP能够通过使用Tomcat从单个安装运行多个服务器实例的能力来避免影响已安装Tomcat的行为。因此,您创建的每个新Tomcat服务器的默认配置将是与向导中选择的Tomcat运行时关联的Tomcat安装的新服务器实例。
如果您希望Eclipse中的新Tomcat服务器运行的实例与Tomcat安装中的默认批处理文件运行的实例相同,那么当Eclipse中的Tomcat服务器表现不符合预期时,您可能会感到惊讶。

可以更改Tomcat服务器配置,使其运行与Tomcat安装相同的实例


您将在这里找到如何操作。

我已经设法让它工作了。以下是我所做的:

  • 在eclipse工作区中创建了一个
    common
    项目
  • 创建了两个web应用程序,分别称为
    first
    second
    ,它们应该共享
    公共
    项目
创建web应用程序时,将使用tomcat配置创建一个
服务器
项目

  • 在Servers项目中更改catalina.properties
,并添加行
shared.loader=/path to workspace/common/bin

这对发展非常有效。每次创建新构建时,所有内容都是同步的。对于部署,您需要将
common
项目转换为
common.jar
并将其放置在
${catalina.home}/lib

中。Tomcat具有服务器范围的设置,您可以在server.xml中定义自己的全局资源,这些资源可以与所有WebApp共享。您可以使用自己的类,而不是像本例中的整数。但是我不知道如何在Eclipse中使用server.xml和全局lib/目录。