5

私はMaven Webアプリケーションを持っています。私は springsource ツール スイートとそのビルトイン tc ファブリック サーバーを使用しています。

変更を加えるたびに、mvn clean install を実行してサーバーを再起動する必要があります。JSPの変更についても。

JSP の変更を行う方法はありますか? 通常の Web アプリ (maven アプリではありません) のように、更新時にブラウザーに反映されます。

インターネットで検索しましたが、まだ成功していません。

まだそれについての手がかりはありません。これにより、開発プロセスが非常に遅くなります。私はjrebelを調べましたが、無料ではなく、クラスのホットデプロイを探しているのではなく、JSP、javascript、cssなどのホットデプロイだけを探しています.

4

4 に答える 4

5

現在、プロファイルを使用して JSP をターゲット ディレクトリにコピーしています。これは、JSP を更新する必要があるときに Eclipse から呼び出します。実行を追加することで、このようにクラスファイルをコピーすることもできます。

<profile>
    <id>copyJsps</id>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <outputDirectory>${basedir}/target/app/WEB-INF/jsp</outputDirectory>
                    <resources>
                        <resource>
                            <directory>src/main/webapp/WEB-INF/jsp</directory>
                            <filtering>true</filtering>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</profile>

使用する:mvn resources:copy-resources -PcopyJsps

于 2013-11-19T14:46:51.493 に答える
3

これを実現するには、Eclipse Filesync プラグインを使用できます。Maven出力フォルダーをアプリケーションサーバーディレクトリにマップするようにプラグインを構成できます

私はこれがMavenの方法ではないことを知っていますが、うまくいきます。

たぶん、この質問はさらに洞察を与えるでしょう。

于 2013-08-27T14:54:33.393 に答える
1

これは、Linux で JBoss を使用している場合の私の簡単な解決策 (回避策?) です。また、Tomcat や、展開された戦争をサポートするその他のコンテナにも有効なはずです。

1.mvn war:inplaceで展開された戦争を作成するために使用しますsrc/main/webapp。これにより、クラスとライブラリがそこにコピーされます。JSP (または他の /webapp/ ファイル) を変更するだけの場合は、この手順を繰り返す必要はありません。classes別の方法として、 およびlibにシンボリック リンクを作成することもできますsrc/main/webapp/WEB-INF

cd src/main/webapp/WEB-INF
ln -s ../../../../target/classes
mvn package
ln -s ../../../../target/*/WEB-INF/lib

2.展開ディレクトリで、src/main/webapp へのシンボリック リンクを作成します。

cd $DEPLOYMEN_DIR
ln -s $MYAPP_DIR/src/main/webapp myapp.war

これにより、JSP やその他の webapp ファイルへの変更がすぐに利用できるようになります。変更を確認したい場合は、classesweb.xml を変更するだけでアプリケーションのリロードをトリガーできます。このスクリプトを実行して、再起動のトリガーを監視できます。

#!/bin/bash
while sleep 1; do 
    if [[ -n $(find WEB-INF/classes -newer WEB-INF/web.xml -type f) ]];then
        date
        touch WEB-INF/web.xml
    fi
done

ディレクトリから実行しますsrc/main/webapp/

JBoss AS 7 に関する注意:リロードをトリガーするmyapp.war.dodeployには、タッチする代わりにファイルを作成する必要があります。web.xml

于 2013-08-23T11:04:55.103 に答える
0

clean プラグインと resources プラグインを使用すると、静的ファイルを簡単にクリーンアップしてコピーできますが、JSP ファイルでは常に機能するとは限りません。コピーされる JSP ファイルの Java ソースが新しい依存関係を導入する場合、それを lib フォルダーにコピーするつもりはありません。その場合、アプリはClassNotFoundExceptionで壊れます。

コピーされたとしても、依存関係のあるフォルダーをスキャンしてクラスパスを更新するようにサーバーを構成する必要があるため、壊れる可能性があります。そして、それがホットデプロイメントの始まりだと私は信じています (詳細)。

Vinayの提案も試してみてください。彼の答えから判断すると、tc サーバーはデフォルトで依存関係のスキャンをサポートしているようであり、適切な maven ビルドを使用すると、これは満足のいく解決策になる可能性があります。

静的ファイルをクリーンアップして、ソース ディレクトリからデプロイ先にコピーするには:

      <plugin>
            <groupId>org.apache.maven.plugins</groupId>           
            <artifactId>maven-clean-plugin</artifactId>
            <version>2.5</version>
            <executions>
                <execution>
                    <id>clean-loaded</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                    <configuration>
                        <excludeDefaultDirectories>true</excludeDefaultDirectories>
                        <filesets>
                            <fileset>
                                <directory>${path.server.input}</directory>
                                <followSymlinks>false</followSymlinks>
                                <useDefaultExcludes>false</useDefaultExcludes>
                                <includes>
                                    <include>**/*.jsp</include>
                                    <include>**/*.js</include>
                                    <include>**/*.html</include>
                                    <include>**/*.css</include>
                                    <include>**/*.png</include>
                                    <include>**/*.gif</include>
                                    <include>**/*.jpg</include>
                                    <include>**/*.jpeg</include>
                                </includes>                               
                            </fileset>
                        </filesets>
                    </configuration> 
                </execution>
            </executions>
        </plugin>
                    
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
              <execution>
                <id>copy-compile-output</id>                    
                <phase>compile</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                    <configuration>
                        <outputDirectory>${path.server.input}</outputDirectory>
                        <overwrite>true</overwrite>
                        <includeEmptyDirs>true</includeEmptyDirs>
                        <filtering>true</filtering>
                        <resources>
                            <resource>
                                <directory>${path.jsp.source}</directory>
                                <targetPath>${path.element.jsp.deploy}</targetPath>
                                <includes>
                                    <include>**/*.jsp</include>
                                </includes>
                            </resource>                     
                            <resource>                      
                                <directory>${path.static.source}</directory>
                                <targetPath>${path.element.static.deploy}</targetPath>
                                <includes>
                                    <include>**/*.js</include>
                                    <include>**/*.html</include>
                                    <include>**/*.css</include>
                                    <include>**/*.png</include>
                                    <include>**/*.gif</include>
                                    <include>**/*.jpg</include>
                                    <include>**/*.jpeg</include>
                                </includes>
                            </resource>                     
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

これをあなたのセクションに追加してくださいproperties

<path.server.input>ABSOLUTE_PATH_TO_DEPLOYED_WEBAPP_ROOT</path.server.input>
<path.jsp.source>ABSOLUTE_PATH_TO_JSP_SOURCE_ROOT</path.jsp.source>
<path.static.source>ABSOLUTE_PATH_TO_STATIC_SOURCE_ROOT</path.static.source>
<path.element.jsp.deploy>REALTIVE_PATH_TO_JSP_DEPLOY_ROOT</path.element.jsp.deploy>
<path.element.static.deploy>REALTIVE_PATH_TO_STATIC_DEPLOY_ROOT</path.element.static.deploy>

で始まるプロパティは、path絶対パスであるか、a などで始まる必要があります${project.basedir}。で始まるプロパティpath.elementは相対パスです。つまり、絶対パスである別のプロパティを前に付けたり、別のプロパティで開始したりしてはなりません/outputDirectory/targetPathリソース プラグインが( )内にコピーされるためです。resources:copy-resources, resource

私の経験では、IDE は通常、UI のクリーン アンド ビルド アクションをコンパイル フェーズにバインドします。また、IDE には通常、シェル コマンドまたは Maven カスタム ゴールをマップして、UI メニューから表示できるようにする方法があります。

クリーンアンドビルドで実行するには

プラグインはすでにコンパイル フェーズにバインドされています。コンパイル フェーズの最後にクリーン プラグインがリソース プラグインの前に実行されるようにするには、それらをまとめてプラグイン セクションの最後に配置します。プラグインが 2 回定義されていても問題ありません。pom を先頭から読み取るときに、最初のクリーンなプラグイン定義が最初のリソース プラグイン定義の前に来るようにしてください。

別のアクションとして実行するには

execution両方のタグの下を次のように変更します。

<id>default-cli</id>
<phase>never</phase>

そして今、それはcompile段階的に実行されるのではなく、コマンドラインから呼び出すことによって実行されます:

mvn clean:clean resources:copy-resources

この場合、コマンド引数の順序で順序を定義しているため、pom でのプラグイン定義の配置は関係ありません。これがあなたに合っているなら、あなたの IDE はおそらくこのコマンドを UI メニューから見えるカスタム目標としてマップする方法を持っています。

どちらの場合も、初回実行時にプロジェクト フォルダーをバックアップすることをお勧めします。

于 2013-08-29T11:43:19.860 に答える