我正在尝试编写一个 Gradle 任务,将生成的 war 文件复制到我的本地 tomcat 实例:

这不起作用,我不知道如何调试它:

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

关于下一步该做什么有什么想法吗?

有帮助吗?

解决方案

另外,你可能能够充分利用 gradle这个-Tomcat的插件

其他提示

在WAR任务是知道它产生的伪影的。

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

我完成这个以:

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

运行它是这样的:

gradle deploy

您当然可以使用 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. 移动到可以重用的插件/任务代码。

这个有限版本现在对我有用:-)

您可以给摇篮货物插件的一个镜头。它可以让你部署一个WAR文件到本地和远程的Tomcat。

请,执行deploylocal之前,请确保战争归档越来越捆绑在一起。 也许,你可以定义一个依赖性:

task deploylocal(dependsOn: build) << {

NB有在Java插件名为libsDir公约属性。它可以让你参考编译/中更好地库目录:

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

首先,试图调试。检查任务执行的顺序;看看war文件生成后,它正在运行。也不论它是否表示UP-TO-DATE。

这个问题可能是缺少这项工作,要复制输出之间的依赖关系的。

尝试与副本任务的情况下更换这个总任务,并使其依赖于你试图复制战争文件。

像这样:

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

实际上后一个替换货物插件gradle这个这个功能,并通过银行经营部署

gradle cargoRunLocal
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top