gradle プラグイン、gradle 1.11 で Spring Tool Suite 3.5 を使用する
これを達成したい:gradle build
コマンドラインから実行するときと、Eclipse から Tomcat にデプロイするときの両方で、プロジェクト依存ライブラリのコンテンツを WAR ファイルに抽出します。
次のような build.gradle プロジェクトがあります。
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
webAppDirName = 'WebContent'
configurations{
common
}
eclipse{
wtp {
facet{
facet name: 'jst.web', version: '3.0'
facet name: 'java', version: '1.7'
}
}
}
war{
from ({zipTree(configurations.common.singleFile)}){
into('common')
}
}
dependencies {
common "group:artifact:version:common@jar"
}
configurations.common
Eclipse はセクションで規定されているように を抽出しないwar{}
ため、スクリプトを少し変更する必要がありました。
eclipse{
wtp{
facet{
...
}
component{
resource sourcePath: "build/common", deployPath: "/common"
}
}
}
task extractCommon(type:Copy){
from {
configurations.common.collect{ zipTree(it) }
}
exclude 'META-INF/**'
into "$buildDir/common"
}
eclipseClasspath.dependsOn(extractCommon)
このようにして、Eclipse プロジェクト ファイルと設定を再作成する前に、依存する JAR が抽出されますが、残念ながら、 Eclipse プロジェクトの展開アセンブリ設定webAppDirName
からは消えます。
したがって、別の回避策:
eclipse{
wtp{
facet{
...
}
component{
resource sourcePath: "build/common", deployPath: "/common"
resource sourcePath: "$webAppDirName", deployPath: "/"
}
}
}
このようにEclipseは意図したとおりに動作しますが、面倒に見え、何かが欠けているように感じ、Eclipse-wtpプラグインが何らかの形でこれを自動的に行う必要があります.
達成するためのより簡単な方法はありますか:
war{}
Eclipse からのデプロイ時にブロックで定義された所定の動作に従うようにします(Web アプリを作成する前にいくつかの JAR を抽出します)。- デプロイメントからフォルダー
resources
を消去せずに増分的に定義するwebAppDirName
編集: 問題を言い換えましょう:
典型的なディレクトリ構造の戦争プロジェクトがある場合
src
main
java
webapp
generated_source
そして build.gradle は次のようになります:
apply plugin:'java'
apply plugin:'war'
apply plugin:'eclipse-wtp'
eclipse.wtp.component.resource(sourcePath:'generated_source', deployPath:'/WEB-INF')
次にgradle cleanEclipse eclipseWtpComponent
、結果のファイルを実行した後 -.settings/org.eclipse.wst.common.component
次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="gradleissue">
<property name="context-root" value="gradleissue"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/WEB-INF/" source-path="generated_source"/>
</wb-module>
</project-modules>
しかし、それは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="gradleissue">
<property name="context-root" value="gradleissue"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/WEB-INF/" source-path="generated_source"/>
</wb-module>
</project-modules>
/src/main/webapp
展開アセンブリからフォルダーが消えました。これは本来あるべきことではないという悪い予感がします。https://github.com/gradle/gradle/blob/master/subprojects/ide/src/test/groovy/org/gradle/plugins/ide/eclipse/EclipseWtpPluginTest.groovyのテストも確認しましたが、次のようになりますケースがありません (私はグルーヴィーな人ではありません)。