38

生成された war ファイルをローカルの tomcat インスタンスにコピーする Gradle タスクを作成しようとしています。

これは機能しておらず、デバッグ方法がわかりません:

 task deploylocal() << {
    println "Copy from ${buildDir}\\libs into ${tomcatHome}/webapps"
    copy{
      from "${buildDir}\\libs"
      into "${tomcatHome}/webapps"
      include '*.war'
    }
  }

次に何をすべきかについてのアイデアはありますか?

4

9 に答える 9

51

WAR タスクは、それが生成するアーティファクトを認識します。

task deployToTomcat(type: Copy) {
    from war.archivePath
    into "${tomcatHome}/webapps"
}
于 2011-01-15T05:19:03.360 に答える
14

私はこれを達成しました:

task deploy (dependsOn: war){
    copy {
        from "build/libs"
        into "C:/dev/jetty-distribution-9.1.4.v20140401/webapps"
        include "*.war"
    }
}

次のように実行します。

gradle deploy
于 2014-04-27T12:40:42.830 に答える
12

もちろん、Tomcat プラグインを使用することもできます。私のセットアップでは、すぐに使用できる war と tomcat オプションを使用/変更できません。

個人的には、次のフレーバーが好きです (build.gradle からコピー)。

tomcat_home='tomcat_location'
tomcat_bin=tomcat_home + '/bin'
tomcat_start=tomcat_bin + '/startup.sh'
tomcat_stop=tomcat_bin + '/shutdown.sh'
tomcat_webapps = tomcat_home + '/webapps'

task tom << {
    if (project.hasProperty('start')) {
        startTom()
    } else if (project.hasProperty('stop')) {
        stopTom()
    } else if (project.hasProperty('deployNstart')) {
        stopTom()
        webappsCopy()
        startTom()
    } else {
        throw new RuntimeException('unrecognized option')
    }
}

def stopTom() {
    executeCmd(tomcat_stop)
}

def startTom() {
    executeCmd(tomcat_start)
}


def executeCmd(command) {
    proc = command.execute()
    proc.waitFor()
}

def webappsCopy() {
    copy {
        from 'war file location' // could be exploded or war itself
        into tomcat_webapps
    }
}

-- コマンドラインから「tom」タスクに含めたさまざまなオプションを呼び出します --

$ gradle tom -Pstart
$ gradle tom -Pstop
$ gradle tom -PdeployNstart

Tomcat に関連するコマンドやオプションを追加すると、これはさらに大きくなる可能性があります。いくつかのポインタ:

  1. 場所などを gradle.properties に移動して、さまざまな環境で動作できるようにします。
  2. Tomcat サーバー ポートをポーリングして、オプションとメッセージを微調整します。
  3. 再利用できるプラグイン/タスク コードに移動します。

この限定バージョンは今私のために働いています:-)

于 2011-12-20T00:52:05.520 に答える
7

または、 gradle-tomcat-pluginを利用できる場合もあります

于 2011-03-06T21:15:08.697 に答える
7

Gradle Cargo プラグインを試すことができます。WAR ファイルをローカルおよびリモートの Tomcat にデプロイできます。

于 2011-06-15T20:44:54.327 に答える
1

実際には後で、この機能を gradle 用の cargo plugin に置き換え、デプロイを実行しました

gradle cargoRunLocal
于 2014-05-04T14:18:33.623 に答える
1

を実行する前に、war アーカイブがバンドルされていることを確認してくださいdeploylocal。おそらく、依存関係を定義できます。

task deploylocal(dependsOn: build) << {

注: Java プラグインには、という名前の規約プロパティがありますlibsDir。build/libs ディレクトリをより適切な方法で参照できます。

 task deploylocal(dependsOn: build) << {
    println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps"
    copy{
      from libsDir
      into "${tomcatHome}/webapps"
      include '*.war'
    }
  }
于 2010-11-18T12:05:14.463 に答える
1

すでにwarプラグインがある場合は、追加することもできます

war.doLast {
    copy {
        from war.archiveFile
        into "${tomcatHome}/webapps"
    }
}

そうすれば、war ファイルをビルドするたびに常に自動的にデプロイされます。

于 2020-07-24T16:09:12.857 に答える
0

まず、デバッグを試みます。タスクの実行順序を確認してください。war ファイルが生成された後に実行されているかどうかを確認します。また、UP-TO-DATE と表示されているかどうか。

問題は、このタスクとコピーする出力との間に依存関係がないことである可能性があります。

この一般的なタスクを Copy タスクのインスタンスに置き換えてみて、コピーしようとしている war ファイルに依存させてください。

このようなもの:

task deployLocal(type: Copy) { 
    dependsOn configurations.archives.buildArtifacts
    from configurations.archives.allArtifacts*.file 
    into("$tomcatHome/webapps") 
}
于 2010-11-20T11:28:41.843 に答える