java - HotSwaping代码到 "mvnDebug tomcat:run"

标签 java tomcat maven-3 hotswap

通常我使用mvnDebug tomcat:run启动tomcat。

代码更改后我需要使用mvn tomcat:redeploy

这是次优的,因为我通常只更改现有方法体的内容。

我可以将方法的主体热交换到运行时中,然后热重新部署作为回退吗?

不幸的是,我没有找到像 maven-hotswap-plugin 这样的东西。

faces-config.xml

... <application>
  <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
  <locale-config>
   <default-locale>de_DE</default-locale>
  </locale-config>
  <resource-bundle>
   <base-name>Message</base-name>
   <var>message</var>
  </resource-bundle>
  <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
 </application>
</faces-config>

web.xml:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
</listener>

pom.xml:

<dependencies>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-envers</artifactId>
        <version>4.3.0.Final</version>
    </dependency>
    <dependency>
        <groupId>net.java.dev.ajax4jsf</groupId>
        <artifactId>ajax4jsf</artifactId>
        <version>1.0.6</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.6.6.Final</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>1.2.10</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version>1.2.10</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.myfaces.tomahawk</groupId>
        <artifactId>tomahawk12</artifactId>
        <version>1.1.9</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.facelets</groupId>
        <artifactId>jsf-facelets</artifactId>
        <version>1.1.14</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>3.1.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>2.5.6</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.2-1004-jdbc41</version>
    </dependency>

    <dependency>
        <groupId>servletapi</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

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

最佳答案

您可以使用 Jrebel - 它完全符合您的预期。您只需要指定 javaagent,它将在运行时重新加载所有类和框架更改。它还适用于远程服务器

要将它与 Maven 项目集成,您必须添加 jrebel-maven-plugin ,这将生成所有配置 (rebel.xml) 文件。

如果没有 JRebel,您可以使用标准的 HotSwap 机制,但它只允许重新加载方法体

关于java - HotSwaping代码到 "mvnDebug tomcat:run",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548506/

相关文章:

java - 如何在 mvn :package 中包含 GWT 生成的文件

Spring JMX Mbean 未出现或未在 jconsole 中注册

java - Maven3 : when groupId is renamed, 会导致任何冲突或错误

java - 将 `File[]` 转换为 `List<String>` 的更好方法

java - 遍历实例变量的 ArrayList

java - Android Studio Android 资源链接失败错误.. AAPT : error: resource android:attr/lStar not found. at values.xml 105

java - 如何在 Maven 过滤后验证 XML?

java - 在这方面,Future 和 Completable future 有什么区别?

tomcat - Servlet 容器优于 Tomcat

java - 从命令行覆盖运行时使用的依赖项版本