IntelliJ e Tomcat… os arquivos alterados não são reconhecidos automaticamente pelo Tomcat

135

Estou executando o Intellij Ultimate com o Tomcat e implanto uma guerra. Tudo é implementado corretamente no diretório webapp do tomcat.

Quando altero um arquivo como um arquivo xhtml, existe uma maneira do tomcat captar automaticamente essa alteração? A partir de agora, eu preciso copiar o arquivo do Intellij e copiá-lo para o diretório em que ele reside no diretório do aplicativo da web tomcat. Eu sei que existem certos arquivos que precisarão de uma recompilação, mas xhtmls não são um deles.

Peter
fonte

Respostas:

21

Deixe-me descrever a sequência de ações usando capturas de tela:

  1. Abra sua configuração de Execução / Depuração do Tomcat (Executar> Editar configurações)

insira a descrição da imagem aqui

  1. Clique no ícone Adicionar, selecione 'Artefato' e, em seguida, selecione pizza_mvc:war exploded: insira a descrição da imagem aqui

  2. Modifique 'On update action' e 'On frame diactivation': insira a descrição da imagem aqui

  3. Sempre que quiser atualizar seus recursos, pressione <Ctrl> + F10

Lord Nighton
fonte
Obrigado por me lembrar de verificar a ação "Ao 'Atualizar'"
km1
290

Isso não pode ser feito se você implantar uma guerra com o IntelliJ IDEA. No entanto, pode ser se você implantar uma guerra explodida . Na IDEA:

  1. abra a configuração de execução / depuração do Tomcat ( Executar> Editar configurações )
  2. Vá para a guia "Implantação"
  3. Na seção "Implementar na Inicialização do Servidor", remova (se houver) o artefato my-webapp-name:war
  4. Clique no ícone adicionar, selecione 'artefato' e, em seguida, selecione my-webapp-name:war exploded
  5. Clique em OK (na caixa de diálogo "Selecionar artefatos para implantar")
  6. Ainda na janela Configuração de Execução / Depuração, selecione a guia "Servidor"
  7. No meio dessa guia, altere a configuração "Desativação no quadro" para "Atualizar recursos" ou "Atualizar classes e recursos"
    • Atualizar recursos: todos os recursos alterados (ou seja, todos os componentes do aplicativo, exceto as classes) serão atualizados.
    • Atualizar classes e recursos: todos os recursos alterados serão atualizados; classes alteradas serão recompiladas. Observe que a atualização das classes reais depende do servidor da web de recursos. Se bem me lembro, o Tomcat recarregará arquivos html / xhtml e jsp, mas não Servlets ou classes que JSPs ou Servlets usam. Você precisa modificar o Tomcat para usar um carregador de classe dinâmico para isso.
  8. Você também pode definir a ação " Ao 'atualizar' " para a ação selecionada acima também.
    • Isso determinou o que acontece quando você clica no Ícone de atualizaçãoícone Atualizar (ou Ctrl+ F10) na janela Executar.
    • a "caixa de diálogo Mostrar" determina se a IDEA solicitará cada vez que você clicar no ícone de atualização
  9. Clique OK.

Agora, sempre que você fizer uma alteração, o IDEA reimplementará o (s) arquivo (s) alterado (s) quando o quadro do IDEA for desativado (isto é, perde o foco). Demora um ou dois segundos. Você o verá na barra de status inferior do IDEA. Obviamente. você ainda precisará atualizar o navegador da Web para buscar o novo arquivo (a menos que a página tenha uma atualização automática do ajax, como busca).

Uma boa combinação com o Tomcat é definir "Desativação no quadro" como "Atualizar recursos" e a ação "Ao 'atualizar' para" Reimplantar "ou" Reiniciar servidor ". Isso permite que as páginas estáticas sejam atualizadas rapidamente por meio da desativação do quadro e classe atualizada por meio da ação 'update'.

Uma empresa chamada ZeroTurnaround vende JRebel, que é uma solução dinâmica para carregadores de classes . Eles também têm uma série de cinco partes sobre o assunto, que é muito boa.

Javaru
fonte
Estou com um erro: Error: Artifact 'my-webapp-name:war exploded' has invalid extensioncomo corrigir?
Anton Dozortsev
3
Também recomendo usar o DCEVM para recarregar automaticamente as classes. Você pode usar "Atualizar classes e recursos" para aplicar quaisquer alterações ao código-fonte sem reimplementar o aplicativo. Veja: blog.jetbrains.com/idea/2013/07/… . Além do que este tutorial explica, é necessário configurar o JAVA_HOME na guia Setup / Connection - Debug do Tomcat Run Configuration para apontar para o JRE do DCEVM.
Alex Fedulov
1
@yaroslavprokipchyn - Não estou familiarizado com o JBoss e com quaisquer requisitos 'especiais' que possam ter. Mas, tanto quanto eu sei, deve funcionar da mesma maneira. Para o tomcat, o IDEA cria uma configuração do Tomcat (context.xml) que informa ao Tomcat para usar o diretório de destino / {contextName} como o diretório raiz do aplicativo da web. Você pode consultar o guia de ajuda para obter informações específicas sobre o JBOss.
Javaru
3
Na etapa 7, você não (pelo menos na Intellij 14) obterá as opções suspensas apropriadas, a menos que tenha todos os seus artefatos carregados como "explodidos".
mortensi
1
@ChiefTwoPencils - A Etapa 5 está clicando em OK na caixa de diálogo "Selecionar artefatos a serem implantados" (para os quais não há "aplicação"), não na janela de configuração Executar / depurar.
Adicionei
12

Se você deseja atualizar classes e recursos, execute o Tomcat no modo de Depuração . Nesse modo, o IntelliJ atualiza classes e recursos sem problemas (hot swap).

Tenho o mesmo problema. O IntelliJ não atualizou meu projeto, porque eu executo como "Modo de Execução". Quando eu corro modo de depuração e pressiono Ctrl+ F10, ele atualiza classes e recursos.

Łukasz Woźniak
fonte
Control-F10 corrigiu o problema para mim. Obrigado!
precisa saber é o seguinte
3

Eu encontrei uma maneira melhor.

No Eclipse, criamos, compilamos + recarregamos arquivos estáticos automaticamente. Na verdade, os arquivos estáticos são servidos diretamente do src / main / webapp .

No IntelliJ, em vez de servir diretamente do src / main / webapp , existe uma pasta criada no destino, na qual você terá uma cópia do seu src / main / webapp e também outros contextos relacionados. Web-inf / classes / lib.

Se você colocar, em vez do destino, a saída do artefato explodido para src / main / webapp , ele não substituirá os arquivos de origem e servirá diretamente, você não precisará pressionar - atualizar recursos / atualizar recursos e classes

Então, o que você precisa fazer no IntelliJ é

  1. modificar o diretório de saída do artefato explodido para src / main / webapp insira a descrição da imagem aqui
  2. faça uma macro para salvar e recompilar / compilar classes sujas (cmd + shift + f9) insira a descrição da imagem aqui insira a descrição da imagem aqui
  3. edite o registro e as preferências para criar automaticamente e durante a execução do aplicativo (cmd + shift + a - registry). insira a descrição da imagem aqui insira a descrição da imagem aqui

Depois disso, se você tiver tarefas que alteram arquivos estáticos de fora do IntelliJ, você verá alterações imediatamente sem acessar o IntelliJ e Atualizar Recursos , e para as classes em que a macro é salva e compilada (Nota: você também pode pressionar Compilar / Recompile: cmd + shift + F9 / cmd + F9 - se você tiver vários editores abertos, verá que seus editores * sujos não estarão sujos e as alterações (classes) serão recarregadas)

Radu Toader
fonte
Parece que se você tiver o registro compiler.automake .. ativado, ele envia suas alterações apenas pressionando salvar também.
Radu Toader
0

Isso é possível apenas quando você implanta a pasta war explodida, habilita o recarregamento a quente e inicia o tomcat no modo de depuração.

Estes são os passos para conseguir isso.

  1. abra a configuração de execução / depuração do Tomcat (Executar> Editar configurações)
  2. Vá para a guia "Implantação" 3.Na seção "Implantar na inicialização do servidor", remova (se houver) o artefato my-webapp-name: war
  3. Clique no ícone adicionar, selecione 'artefato' e, em seguida, selecione my-webapp-name: war exploded
  4. Clique em OK (na caixa de diálogo "Selecionar artefatos para implantar")
  5. Ainda na janela Configuração de Execução / Depuração, selecione a guia "Servidor"
  6. Altere as configurações "Desativação no quadro" e "Na ação de atualização" para "Atualizar classes e recursos"
  7. Aplicar e salvar
  8. Vá para as configurações normais do projeto clicando em Arquivo, depois em Configurações OU Pressionando CTRL + ALT + S
  9. ir para "Compilação, Execução, Implantação"
  10. Compilador
  11. Selecione Criar projeto automaticamente
  12. Salve 
  13. Iniciar o tomcat no modo de depuração
Adindu Stevens
fonte
0

se você tiver arquivos com várias partes que deseja visualizar / reproduzir imediatamente, faça o upload diretamente na pasta de destino. * (altere apenas o local de gravação para a pasta de destino / static /)

String yourpath = C\\andSoForth
    yourPath + "\\target\\classes\\static\\uploads\\audiofiles\\"

você poderá visualizar seu arquivo imediatamente sem precisar reiniciar seu IDE

Esther
fonte