JSPs nem sempre recompilam após uma instalação de pacote de código

Quando você instala um pacote CQ5 contendo uma nova versão do nosso código /apps (com arquivos.jsp ou .Java contidos), nem todo o código JSP é recompilado após a instalação do pacote.

Solução

Para resolver esse problema para uma única instalação, faça o seguinte:

  1. Faça logon em http://<host>:<port>/crx como administrador (onde <host> é o nome do host ou endereço IP do seu servidor CQ5 e <port> é o número da porta).
  2. Abra a ferramenta CRX Explorer.
  3. Exclua os nós em /var/classes/org/apache/jsp/apps/.

Para resolver esse problema de forma que toda vez que você instalar o pacote, o JSP seja recompilado, modifique seu pacote da seguinte maneira:

  1. Adicione duas regras de filtro no início do seu filter.xml (em META-INF/vault/filter.xml)
    <workspaceFilter version="1.0"> <filter root="/var/classes/org/apache/jsp/apps" /> <filter root="/var/classes/apps" /> ...
    
  2. Em seguida, inclua duas pastas vazias /var/classes/org/apache/jsp/apps e /var/classes/apps no seu pacote zip. É assim que, quando você instala o pacote, todos os arquivos de classe nesses caminhos são excluídos. Conseqüentemente, isso faz com que todos os arquivos JSPs e Java de seu aplicativo no diretório /apps do seu pacote sejam recompilados pelo Apache Sling.

Aplica-se a

CQ5.2, CQ5.3 sem hotfix 30517

Informações adicionais

Esse problema se deve à maneira como o Apache Sling avalia se deve compilar um determinado arquivo JSP ou Java.

A data jcr:lastModified do script é comparada com a data do arquivo de classe existente jcr:lastModified.

Se a data da última modificação do script for mais recente que a do arquivo da classe, ela será recompilada. Caso contrário, não será recompilada.

Quando você compacta um arquivo zip contendo arquivos jsp, alguns JSPs podem ter registros de data e hora mais antigos que os arquivos de classe em /var/classes.

Observação:

Não use essa solução alternativa com o CQ5.4. Se você está tendo este problema no CQ5.4, envie um tíquete de suporte e solicitação

Observação:

O AEM6 tem o plug-in do console da web para limpar as classes compiladas, independentemente de onde e como elas são armazenadas, que poderão ser usadas durante a implementação de código http://<host>:<port>/system/console/slingjsp