3

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.commonEclipse はセクションで規定されているように を抽出しない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プラグインが何らかの形でこれを自動的に行う必要があります.

達成するためのより簡単な方法はありますか:

  1. war{}Eclipse からのデプロイ時にブロックで定義された所定の動作に従うようにします(Web アプリを作成する前にいくつかの JAR を抽出します)。
  2. デプロイメントからフォルダー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のテストも確認しましたが、次のようになりますケースがありません (私はグルーヴィーな人ではありません)。

4

1 に答える 1