Pergunta

Estou tentando escrever uma tarefa gradle que copia arquivos de guerra gerados para minha instância local do tomcat:

Isso não está funcionando e não tenho certeza de como depurar:

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

Alguma idéia sobre o que fazer a seguir?

Foi útil?

Solução

Como alternativa, você pode ser capaz de alavancar o gradle-tomcat-plugin

Outras dicas

A tarefa de guerra está ciente dos artefatos que gera.

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

Eu consegui isso com:

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

executando assim:

gradle deploy

Você pode usar o plug-in Tomcat. Minha configuração me impede de usar/modificar a opção de Guerra e Tomcat fora da caixa.

Pessoalmente, gosto do seguinte sabor (copiado do meu 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
    }
}

-Você chama as várias opções que você inclui na tarefa 'Tom' da linha de comando-

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

Isso pode crescer ainda mais, à medida que adiciono mais comandos/opções relacionadas ao tomcat. Poucos ponteiros:

  1. Mova a localização etc. para gradle.properties para que possa funcionar em diferentes ambientes.
  2. Envolva sua porta do servidor Tomcat para ajustar as opções e msgs.
  3. Mova para o código do plug -in/tarefa que pode ser reutilizado.

Esta versão limitada funciona para mim agora :-)

Você poderia dar o Plugin de carga gradle um tiro. Ele permite implantar um arquivo de guerra em um tomcat local e remoto.

Por favor, verifique se o arquivo de guerra está sendo empacotado antes deploylocal É executado. Talvez você possa definir uma dependência:

task deploylocal(dependsOn: build) << {

NB Há uma propriedade de convenção no plugin java nomeado libsDir. Ele permite que você faça referência ao diretório Build/Libs de maneira melhor:

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

Primeiro, tentando depurar. Verifique a ordem da execução da tarefa; Veja se está sendo executado após a produção do arquivo de guerra. Além disso, se diz ou não atualizado.

O problema pode ser a falta de dependências entre a tarefa e a saída que você deseja copiar.

Tente substituir esta tarefa geral por uma instância de uma tarefa de cópia e torne -a dependente do arquivo de guerra que você está tentando copiar.

Algo assim:

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

Na verdade, mais tarde, substituiu essa funcionalidade pelo plug -in de carga para gradle e execute a implantação por

gradle cargoRunLocal
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top