【问题标题】:Hot code deploy tomcat with Maven热代码使用 Maven 部署 tomcat
【发布时间】:2010-12-27 21:57:38
【问题描述】:

我有一个使用 maven 构建的 Web 应用程序。它以不同项目的形式构建,它们相互依赖——域、dao、服务等。我在每个项目中运行 eclipse:eclipse 来配置我的 eclipse 环境。所以现在我在eclipse中有多个项目。这是我的开发环境。

我还为操作人员构建了一个 tomcat 包,因此我可以为他们提供一个 zip 文件,他们可以提取并运行一个批处理文件来启动服务器。此 zip 文件包含一个 war 文件,该文件在 tomcat 的 <context> 配置中引用。

另外,出于开发目的,我已将 tomcat 设置为从 eclipse 中启动。我的目标是在源代码更改时进行热代码部署。这目前不会发生,因为类文件位于“目标”文件夹中(由于 maven 的目录结构)。而tomcat查看war文件(我的意思是爆炸结构..)

如何配置我的 tomcat/eclipse 环境,以便开始进行热代码部署?

-谢谢!

【问题讨论】:

    标签: tomcat maven


    【解决方案1】:

    我使用tomcat-maven-plugin 及其目标tomcat7:run 从eclipse 中启动tomcat(顺便说一句,使用m2e 插件进行eclipse - 很棒的工具 - 可从eclipse 市场获得)。热代码替换对我也不起作用。但我使用了一种解决方法:使用<contextReloadable>true</contextReloadable>,tomcat 会在检测到文件更改时重新加载应用程序。

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/myapp</path>
                    <contextReloadable>true</contextReloadable>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    【讨论】:

      【解决方案2】:

      Tomcat 本身不支持热重新部署,除非您的应用程序框架支持类重新加载。 (Tapestry 可以,但出于其他原因我不建议使用 Tapestry)。我相当确定 eclipse:eclipse 也不支持热重新部署,所以你有两件事对你不利。

      据我所知,您有两种选择...首先,切换到使用 M2Eclipse 而不是 eclipse:eclipse。您必须摆脱旧的 eclipse:eclipse 配置才能使其正常工作。使用 m2eclipse 会将类从 eclipse 编译器导出到 Tomcat。这避免了中间的“mvn clean package”步骤。一旦你运行了 m2eclipse,你就可以下载 JRebel。即使框架本身不支持类重新加载,JRebel 也将支持热重新部署。

      祝你好运!

      【讨论】:

      • 如果我的回答有帮助,别忘了接受。如果我的回答很糟糕,请不要打扰:D
      【解决方案3】:

      您可以使用由“autoDeploy”管理的重新加载机制,您可以阅读它here。我更改了我的 maven-war-plugin 以将战争输出到 webapp 文件夹:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.3</version>
          <configuration>
              <outputDirectory>${my.tomcat.path}</outputDirectory>
          </configuration>
      </plugin>
      

      与

      <properties>
          <my.tomcat.path>[MY TOMCAT WEBAPP PATH]</my.tomcat.path>
      </properties>
      

      之后我只需要mvn compile war:war 或mvn compile package

      【讨论】:

        猜你喜欢
        • 2011-12-06
        • 1970-01-01
        • 2016-03-26
        • 1970-01-01
        • 2011-02-14
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 2019-04-10
        相关资源
        最近更新 更多