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.

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


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.


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.


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)


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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.