6

通常、私は tomcat を使用して起動しmvnDebug tomcat:runます。

コード変更後、使用する必要がありますmvn tomcat:redeploy

多くの場合、既存のメソッド本体のコンテンツのみを変更するため、これは最適ではありません。

メソッドの本体をランタイムにホットスワップし、フォールバックとしてホット再デプロイできますか?

残念ながら、のようなものは何も見つかりませんでしたmaven-hotswap-plugin

顔-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>
4

7 に答える 7

1

JRebel は良いオプションです。安くはありませんが、オープンソース ライセンスが利用可能です。Maven のインストール手順はこちら: http://zeroturnaround.com/software/jrebel/learn/maven/

これは、特定の実行プロファイルと組み込みの Tomcat によって機能します。これは、Web アプリケーション wars を構築する他のプロジェクトに依存する特定のサブモジュールです。したがって、runner サブモジュールで次のように構成するとします。

<profiles>
         <profile>
             <id>run</id>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.tomcat.maven</groupId>
                         <artifactId>tomcat7-maven-plugin</artifactId>
                         <executions>
                             <execution>
                                 <id>run-wars</id>
                                 <goals>
                                     <goal>run-war-only</goal>
                                 </goals>
                                 <phase>integration-test</phase>
                             </execution>
                         </executions>
                         <configuration>
                            <warDirectory>theWar</warDirectory>
                            <path>/relativepath</path>
                            <systemProperties>
                            <webapps>
                                <webapp>
                                    <groupId>${project.groupId}</groupId>
                                    <artifactId>myArtifact</artifactId>
                                    <version>${project.version}</version>
                                    <type>war</type>
                                    <asWebapp>true</asWebapp>
                                    <contextPath>myContext</contextPath>
                                 </webapp>
                             </webapps> 
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
</profiles>

mvn package -Prunでシャットダウンできるはずのこれを実行できますCtrl+C

次に、これが 1 つのターミナルで実行されている間に、コードを変更し、新しいターミナルを開いてmvn compile. JRebel を使用すると、変更は事実上瞬時に Web アプリに反映されるはずです。

Eclipse の m2e プラグインを介してこれらの同じ目標を実行することを妨げるものは何もないはずです。

于 2014-02-07T16:17:55.043 に答える
1

新しいバージョンは tomcat6 または tomcat7 と呼ばれる必要があるため、古いバージョンの maven tomcat プラグインを使用しているようです。mvnDebug tomcat7:run. 私は 2.2 を使用していますが、Eclipse からのホット スワップは問題なく動作します。

もう少し明確にするために、アプリを起動したときにコマンドプロンプトに表示されるのは次のmvn tomcat:runとおりです。

...
[INFO] >>> tomcat-maven-plugin:1.1:run (default-cli) @ tomcatMvnDebug >>>
...

1.1に注意してください。

mvn tomcat7:runアプリを次のように起動すると、次のように表示されます。

...
[INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) @ tomcatMvnDebug >>>
...

今回の maven は tomcat プラグイン バージョン2.2を使用していることに注意してください。

于 2014-02-11T20:11:17.977 に答える
0

Eclipse または IntelliJ の HotSwap 関数を使用します。どちらも私にとっては非常にうまく機能します。デバッグモードでmavenゴールを実行するだけです(tomcat:run)。

于 2014-02-13T15:03:31.730 に答える