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 メニューから見えるカスタム目標としてマップする方法を持っています。
どちらの場合も、初回実行時にプロジェクト フォルダーをバックアップすることをお勧めします。