2010-11-17 34 views
30

我試圖寫一個拷貝生成的war文件到我的本地Tomcat實例一個搖籃任務:gradle這個:複製戰到tomcat目錄

這不是工作,我不知道如何調試它:

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

關於下一步做什麼的任何想法?

回答

0

請確保在執行deploylocal之前將戰爭檔案捆綁在一起。 也許,你可以定義一個依賴性:

task deploylocal(dependsOn: build) << { 

NB有一個名爲libsDir在Java插件中約定財產。它允許你以更好的方式引用build/libs目錄:

task deploylocal(dependsOn: build) << { 
    println "Copy from ${libsDir.getPath()} into ${tomcatHome}/webapps" 
    copy{ 
     from libsDir 
     into "${tomcatHome}/webapps" 
     include '*.war' 
    } 
    } 
0

首先,嘗試調試。檢查任務執行的順序;看看它是否在製作戰爭文件後運行。還有它是否表示UP-TO-DATE。

問題可能在於此任務與要複製的輸出之間沒有任何依賴關係。

嘗試用複製任務的實例替換此常規任務,並使其依賴於您要複製的war文件。

事情是這樣的:

task deployLocal(type: Copy) { 
    dependsOn configurations.archives.buildArtifacts 
    from configurations.archives.allArtifacts*.file 
    into("$tomcatHome/webapps") 
} 
43

的WAR任務是瞭解它產生的文物。

task deployToTomcat(type: Copy) { 
    from war.archivePath 
    into "${tomcatHome}/webapps" 
} 
+1

[肯](http://stackoverflow.com/users/1375187/ken)[評論](http://stackoverflow.com/suggested-edits/260494)你不會聲明'dependsOn: 'war':你從'war.archivePath'複製的事實是一個隱含的依賴關係。 – Rup 2012-05-10 09:13:19

+0

我建議使用'Copy'任務類型而不是方法調用'copy'。該方法調用不會爲您提供UP-TO-DATE檢查。 – 2013-08-21 13:17:35

+0

更新後的代碼使用'Copy'任務! – 2013-08-22 19:19:19

6

你可以給Gradle Cargo plugin了一槍。它允許您將WAR文件部署到本地以及遠程Tomcat。

11

你當然可以使用tomcat插件。我的設置阻止了我使用/修改開箱即用的戰爭& 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 
    } 
} 

- 你叫你包括的各種選項在命令行的「嗵」的任務 -

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

這可能會進一步增長,因爲我添加更多命令/相關選項Tomcat的。幾個要點:

  1. 移動位置等來gradle.properties,以便它可以在不同的環境中工作 。
  2. 查詢您的tomcat服務器端口以微調 選項和消息。
  3. 轉移到可重複使用的插件/任務代碼。

這有限的版本適用於我現在:-)

11

我完成了這一具有:

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

運行這樣的:

gradle deploy 
0

其實後來換成這個功能與貨物插件的gradle和runn部署通過

gradle cargoRunLocal 
相關問題