Azure Migrate aplicativo e avaliação de código para Java
Este guia descreve como usar o aplicativo Azure Migrate e a ferramenta de avaliação de código para Java para avaliar e reformular qualquer tipo de aplicativo Java. A ferramenta permite avaliar a preparação do aplicativo para replataforma e migração para o Azure. Essa ferramenta é oferecida como uma CLI (interface de linha de comando) e avalia binários de aplicativos Java e código-fonte para identificar oportunidades de replataforma e migração para o Azure. Ele ajuda a modernizar e reformular aplicativos Java de grande escala, identificando casos de uso comuns e padrões de código e propondo alterações recomendadas.
A ferramenta descobre o uso da tecnologia de aplicativos por meio da análise estática de código, fornece estimativa de esforço e acelera a replataforma de código, ajudando você a priorizar e mover aplicativos Java para o Azure. Com um conjunto de mecanismos e regras, ele pode descobrir e avaliar diferentes tecnologias, como Java 11, Java 17, Jakarta EE, Spring, Hibernate, Java Message Service (JMS) e muito mais. Em seguida, ele ajuda você a reformular o aplicativo Java para diferentes destinos do Azure (Serviço de Aplicativo do Azure, Serviço Kubernetes do Azure e Aplicativos de Contêiner do Azure) com regras específicas de replataforma do Azure.
Esta ferramenta é de código aberto e é baseada no WindUp, um projeto criado pela Red Hat e publicado sob a Eclipse Public License.
Descrição geral
A ferramenta foi projetada para ajudar as organizações a modernizar seus aplicativos Java de uma forma que reduza custos e permita uma inovação mais rápida. A ferramenta usa técnicas avançadas de análise para entender a estrutura e as dependências de qualquer aplicativo Java e fornece orientação sobre como refatorar e migrar os aplicativos para o Azure.
Com ele, você pode executar as seguintes tarefas:
- Descubra o uso da tecnologia: veja rapidamente quais tecnologias um aplicativo usa. A descoberta é útil se você tiver aplicativos herdados com pouca documentação e quiser saber quais tecnologias eles usam.
- Avaliar o código para um destino específico: avalie um aplicativo para um destino específico do Azure. Verifique o esforço e as modificações que você precisa fazer para reformular seus aplicativos para o Azure.
Alvos suportados
A ferramenta contém regras para ajudá-lo a reformular seus aplicativos para que você possa implantar e usar diferentes serviços do Azure.
As regras usadas pelo aplicativo Azure Migrate e pela avaliação de código são agrupadas com base em um destino. Um destino é onde ou como o aplicativo é executado e as necessidades e expectativas gerais. Ao avaliar um aplicativo, você pode escolher vários destinos. A tabela a seguir descreve os destinos disponíveis:
Destino | Description | ID |
---|---|---|
Serviço de Aplicações do Azure | Práticas recomendadas para implantar um aplicativo no Serviço de Aplicativo do Azure. | azure-appservice |
Azure Kubernetes Service | Práticas recomendadas para implantar um aplicativo no Serviço Kubernetes do Azure. | azure-aks |
Azure Container Apps | Práticas recomendadas para implantar um aplicativo em Aplicativos de Contêiner do Azure. | azure-container-apps |
Preparação para a nuvem | Práticas recomendadas gerais para preparar um aplicativo Cloud (Azure). | cloud-readiness |
Deteção | Identifica o uso de tecnologia, como bibliotecas e estruturas. | discovery |
Linux | Práticas recomendadas gerais para preparar um aplicativo Linux. | linux |
OpenJDK 11 | Melhores práticas gerais para executar uma aplicação Java 8 com Java 11. | openjdk11 |
OpenJDK 17 | Melhores práticas gerais para executar uma aplicação Java 11 com Java 17. | openjdk17 |
OpenJDK 21 | Melhores práticas gerais para executar uma aplicação Java 17 com Java 21. | openjdk21 |
Quando a ferramenta avalia a Preparação para a Nuvem e os serviços relacionados do Azure, também pode relatar informações úteis para o uso potencial de diferentes serviços do Azure. A lista seguinte mostra alguns dos serviços abrangidos:
- Bases de Dados do Azure
- Azure Service Bus
- Armazenamento do Azure
- Rede de Entrega de Conteúdos do Azure
- Hubs de Eventos do Azure
- Azure Key Vault
- Azure Front Door
Download
Para usar a appcat
CLI, você deve baixar o arquivo ZIP descrito na próxima seção e ter uma instalação compatível do JDK 11 ou JDK 17 no seu computador. A appcat
CLI é executada em qualquer ambiente compatível com Java, como Windows, Linux ou Mac, tanto para hardware Intel, Arm e Apple Silicon. Recomendamos que você use o Microsoft Build do OpenJDK.
Baixe o aplicativo Azure Migrate e a avaliação de código para Java 6.3.9.0. Atualizado em 2024-12-09.
Para obter mais informações, consulte a seção Notas de versão.
Problemas conhecidos
Certas regras podem não ser acionadas ao analisar expressões específicas do Lambda. Para obter mais informações, consulte o problema do GitHub.
A execução appcat
em um ambiente não-unicode com caracteres complexos de byte duplo causará corrupção. Para soluções alternativas, consulte o problema do GitHub.
Versões anteriores
As seguintes versões anteriores também estão disponíveis para download:
- Azure Migrate aplicativo e avaliação de código para Java 6.3.0.9. Lançado em agosto de 2024.
- Azure Migrate aplicativo e avaliação de código para Java 6.3.0.8. Lançado em março de 2024.
- Azure Migrate aplicativo e avaliação de código para Java 6.3.0.7. Lançado em novembro de 2023.
Começar agora
Para executar appcat
o , verifique se você tem um JDK suportado instalado. A ferramenta suporta os seguintes JDKs:
- Compilação Microsoft do OpenJDK 11
- Compilação Microsoft do OpenJDK 17
- Eclipse Temurin™ JDK 11
- Eclipse Temurin™ JDK 17
Depois de ter um JDK válido instalado, verifique se o diretório de instalação está configurado corretamente na variável de JAVA_HOME
ambiente.
Para continuar, baixe e descompacte o pacote em uma pasta de sua escolha. Em seguida, você obtém a seguinte estrutura de diretórios:
appcat-cli-<version> # APPCAT_HOME
├── README.md
├── bin
│ ├── appcat
│ └── appcat.bat
├── docs
│ └── appcat-guide.html
└── samples
├── airsonic.war
├── run-assessment
├── run-assessment-custom-rules
├── run-assessment-exclude-packages
├── run-assessment-no-code-report
├── run-assessment-openjdk21
├── run-assessment-zip-report
└── run-discovery
- docs: Este diretório contém a documentação do
appcat
. - bin: Este diretório contém os executáveis da
appcat
CLI (para Windows/Linux/Mac). - exemplos: Este diretório contém um aplicativo de exemplo e vários scripts para executar
appcat
no aplicativo de exemplo.
Para executar a ferramenta, abra uma sessão de terminal e digite o seguinte comando no diretório $APPCAT_HOME/bin :
./appcat --help
Para executar a ferramenta de qualquer lugar no computador, configure o diretório $APPCAT_HOME/bin na PATH
variável de ambiente e reinicie a sessão do terminal.
Documentação
Os guias a seguir fornecem a documentação principal para appcat
Java:
Descubra o uso da tecnologia e a preparação para a nuvem sem um serviço do Azure em mente
A descoberta de tecnologias e as metas de preparação para a nuvem fornecem uma excelente visão sobre a replataforma de aplicativos e a modernização para a nuvem. A ferramenta verifica o aplicativo e seus componentes para obter uma compreensão abrangente de sua estrutura, arquitetura e dependências. Ele também encontra possíveis problemas que podem ser desafiadores em um ambiente de nuvem. O discovery
destino, em particular, é usado para criar um inventário detalhado do aplicativo e seus componentes. Este inventário serve de base para uma análise e planeamento mais aprofundados. Para obter mais informações, consulte a seção Relatório de descoberta .
Use o seguinte comando para iniciar a descoberta e a preparação para a nuvem:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target discovery cloud-readiness
Esse tipo de relatório é útil quando você não tem um serviço específico do Azure em mente para implantar seu aplicativo.
A ferramenta sempre executa se discovery
você inclui ou não esse valor no --target
parâmetro.
Avaliar uma aplicação Java
A fase de avaliação é onde a appcat
CLI analisa o aplicativo e seus componentes para determinar sua adequação para replatorming e identificar quaisquer desafios ou limitações potenciais. Esta fase envolve a análise do código do aplicativo e a verificação de sua conformidade com os alvos selecionados.
Você pode selecionar vários destinos usando uma lista de valores delimitada por espaço com o --target
argumento.
Para verificar os destinos disponíveis, execute o seguinte comando:
./appcat --listTargetTechnologies
Este comando produz uma saída semelhante ao exemplo a seguir:
Available target technologies:
azure-aks
azure-appservice
azure-container-apps
cloud-readiness
discovery
linux
openjdk11
openjdk17
openjdk21
Em seguida, você pode executar appcat
usando um ou uma combinação de destinos disponíveis, conforme mostrado no exemplo a seguir:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target cloud-readiness linux azure-appservice
Você também pode executar appcat
com um dos destinos OpenJDK disponíveis, conforme mostrado no exemplo a seguir:
./appcat \
--input ./<my-application-source-path or my-application-jar-war-ear-file> \
--target openjdk11
Para destinos OpenJDK (Java), recomendamos que você escolha apenas um de cada vez.
Recomendação de metas para avaliação do Azure
Sempre que você avaliar um aplicativo para implantação do Azure, recomendamos que comece com os seguintes destinos:
discovery
cloud-readiness
Além disso, especifique um serviço do Azure para implantação, como azure-appservice
ou azure-container-apps
.
Se você pretende mover um aplicativo de um ambiente Windows para uma VM ou contêiner Linux, recomendamos que você também adicione o linux
destino.
Se você pretende mover um aplicativo de uma versão mais antiga do JDK para uma versão mais recente, recomendamos que escolha a próxima versão principal em comparação com a versão anterior em uso pelo aplicativo. Por exemplo, use openjdk11
quando seu aplicativo estiver atualmente implantado com Java 8.
Obter resultados do appcat
O resultado das fases de descoberta e avaliação é um relatório detalhado que fornece um roteiro para a replataforma e modernização do aplicativo Java, incluindo recomendações para o serviço do Azure e a abordagem de replataforma. O relatório serve de base para as próximas etapas do processo de replataforma. Ele ajuda as organizações a aprender sobre o esforço necessário para essa transformação e tomar decisões sobre como modernizar seus aplicativos para obter o máximo de benefícios.
O relatório gerado por appcat
fornece uma visão abrangente do aplicativo e seus componentes. Você pode usar esse relatório para obter informações sobre a estrutura e as dependências do aplicativo e para determinar sua adequação para replataforma e modernização.
As seções a seguir fornecem mais informações sobre o relatório.
Resumo da análise
A página de destino do relatório lista todas as tecnologias usadas no aplicativo. O painel fornece um resumo da análise, incluindo o número de incidentes de transformação, as categorias de incidentes ou os pontos da história.
Ao ampliar o gráfico de pizza Incidentes por categoria , você pode ver o número de incidentes por categoria: Obrigatório, Opcional, Potencial e Informações.
O painel também mostra os pontos da história. Os pontos de história são uma métrica abstrata comumente usada no desenvolvimento de software ágil para estimar o nível de esforço necessário para implementar um recurso ou mudança. appcat
usa pontos de história para expressar o nível de esforço necessário para migrar um aplicativo específico. Os pontos de história não se traduzem necessariamente em horas de trabalho, mas o valor deve ser consistente em todas as tarefas.
Relatório de descoberta
O relatório de descoberta é um relatório gerado durante a fase de descoberta. Ele mostra a lista de tecnologias usadas pelo aplicativo na categoria Informações . Este relatório está apenas informando sobre o uso da tecnologia que appcat
descobriu.
Relatório de avaliação
O relatório de avaliação fornece uma visão geral dos problemas de transformação que precisariam ser resolvidos para migrar o aplicativo para o Azure.
Esses Problemas, também chamados de Incidentes, têm uma gravidade (Obrigatório, Opcional, Potencial ou Informação), um nível de esforço e um número indicando os pontos da história. Os pontos da história são determinados calculando o número de incidentes vezes o esforço necessário para resolver o problema.
Informações pormenorizadas sobre uma questão específica
Para cada incidente, você pode obter mais informações (o detalhe do problema, o conteúdo da regra e assim por diante) apenas selecionando-o. Você também obtém a lista de todos os arquivos afetados por esse incidente.
Em seguida, para cada arquivo ou classe afetada pelo incidente, você pode ir para o código-fonte para destacar a linha de código que criou o problema.
Regras personalizadas
Você pode pensar como um mecanismo de appcat
regra. Ele usa regras para extrair arquivos de arquivos Java, descompila classes Java, verifica e classifica tipos de arquivos, analisa esses arquivos e constrói os relatórios. No appcat
, as regras são definidas na forma de um conjunto de regras. Um conjunto de regras é uma coleção de regras individuais que definem problemas ou padrões específicos que appcat
podem ser detetados durante a análise.
Essas regras são definidas em XML e usam o seguinte padrão de regras:
when (condition)
perform (action)
otherwise (action)
appcat
fornece um conjunto abrangente de regras de migração padrão. Como os aplicativos podem conter bibliotecas ou componentes personalizados, appcat
permite que você escreva suas próprias regras para identificar o uso de componentes ou software que o conjunto de regras existente pode cobrir.
Para escrever uma regra personalizada, use uma linguagem específica de domínio avançado (DLS) expressa em XML. Por exemplo, digamos que você queira uma regra que identifique o uso do driver JDBC PostgreSQL em um aplicativo Java e sugira o uso do Servidor Flexível PostgreSQL do Azure. Você precisa de uma regra para localizar o driver JDBC PostgreSQL definido em um arquivo Maven pom.xml ou um arquivo Gradle, como a dependência mostrada no exemplo a seguir:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
Para detetar o uso dessa dependência, a regra usa as seguintes marcas XML:
ruleset
: O identificador único do conjunto de regras. Um conjunto de regras é um conjunto de regras relacionadas a uma tecnologia específica.targetTechnology
: A tecnologia visada pela regra. Nesse caso, a regra tem como alvo os Serviços de Aplicativo do Azure, o Serviço de Kubernetes do Azure (AKS) e os Aplicativos de Contêiner do Azure.rule
: O elemento raiz de uma única regra.when
: A condição que deve ser cumprida para que a regra seja acionada.perform
: A ação a ser executada quando a regra é acionada.hint
: A mensagem a ser exibida no relatório, sua categoria (Informação, Opcional ou Obrigatória) e o esforço necessário para corrigir o problema, variando de 1 (fácil) a 13 (difícil).
O XML a seguir mostra a definição de regra personalizada:
<ruleset id="azure-postgre-flexible-server"
xmlns="http://windup.jboss.org/schema/jboss-ruleset"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd">
<metadata>
<description>Recommend Azure PostgreSQL Flexible Server.</description>
<dependencies>
<addon id="org.jboss.windup.rules,windup-rules-xml,3.0.0.Final"/>
</dependencies>
<targetTechnology id="azure-appservice"/>
<targetTechnology id="azure-aks"/>
<targetTechnology id="azure-container-apps"/>
</metadata>
<rules>
<rule id="azure-postgre-flexible-server">
<when>
<project>
<artifact groupId="org.postgresql" artifactId="postgresql"/>
</project>
</when>
<perform>
<hint title="Azure PostgreSQL Flexible Server" category-id="mandatory" effort="7">
<message>The application uses PostgreSQL. It is recommended to use Azure PostgreSQL Flexible Server instead.</message>
<link title="Azure PostgreSQL Flexible Server documentation" href="https://learn.microsoft.com/azure/postgresql/flexible-server/overview"/>
</hint>
</perform>
</rule>
</rules>
</ruleset>
Depois de executar essa regra através appcat
do , execute novamente a análise para revisar o relatório gerado. Tal como acontece com outros incidentes, o relatório de avaliação lista os problemas identificados e os ficheiros afetados relacionados com esta regra.
O guia completo para o desenvolvimento de regras está disponível em azure.github.io/appcat-docs/rules-development-guide.
Notas de versão
6.3.9.0
Esta versão contém as seguintes correções e inclui um conjunto de novas regras. Para obter mais informações, consulte abaixo.
Atualizações gerais
- Alterações integradas a partir do repositório Windup upstream (6.3.9.Versão Final).
- Resolvidos links quebrados em descrições de regras e texto de ajuda.
Regras
- Azure Message Queue: novas regras atualizadas e adicionadas para azure-message-queue-rabbitmq e azure-message-queue-amqp.
- Barramento de Serviço do Azure: introduziu uma regra de deteção para o Barramento de Serviço do Azure.
- MySQL & PostgreSQL: regras refinadas de deteção de dependência.
- Azure-AWS Rules: regras existentes aprimoradas e aprimoradas.
- S3 Spring Starter: adicionada uma regra de deteção para o S3 Spring Starter.
- RabbitMQ Spring JMS: adicionada uma regra de deteção para RabbitMQ Spring JMS.
- Regras de registro: regras relacionadas ao registro em log atualizadas e refinadas.
- Regra de armazenamento local: atualizou e refinou a regra de armazenamento local.
- Regra do Sistema de Arquivos do Azure: atualizada e refinada a regra do Sistema de Arquivos do Azure.
Bibliotecas
- Bibliotecas atualizadas para resolver vulnerabilidades de segurança.
6.3.0.9
Esta versão contém as seguintes correções e inclui um conjunto de novas regras. Para obter mais informações, consulte abaixo.
- Resolvido um problema com a
localhost-java-00001
regra. - Introduziu novas regras para identificar tecnologias como AWS S3, AWS SQS, Alibaba Cloud OSS, Alibaba Cloud SMS, Alibaba Scheduler X, Alibaba Cloud Seata e Alibaba Rocket MQ.
- Atualizado o
azure-file-system-02000
para agora suportar extensões de arquivo xml. - Atualizou várias bibliotecas para resolver vulnerabilidades de segurança.
6.3.0.8
Anteriormente, um conjunto de destinos era habilitado por padrão, tornando difícil para certos clientes avaliar aplicativos grandes com muitos incidentes relacionados a problemas menos críticos. Para reduzir o ruído nos relatórios, os usuários agora devem especificar vários destinos, com o parâmetro --target
, ao executar appcat
, dando-lhes a opção de selecionar apenas os alvos que importam.
6.3.0.7
Versão GA (Geralmente Disponível) do aplicativo Azure Migrate e avaliação de código.
Licença
O Azure Migrate application and code assessment for Java é uma ferramenta gratuita de código aberto sem custos e licenciada sob a mesma licença que o projeto WindUp upstream.
Perguntas mais frequentes
P: Onde posso baixar a versão mais recente do aplicativo Azure Migrate e a avaliação de código para Java?
Você pode fazer o download appcat
em aka.ms/appcat/azure-appcat-cli-latest.zip.
P: Onde posso encontrar mais informações sobre o aplicativo Azure Migrate e a avaliação de código para Java?
Ao fazer o download appcat
do , você recebe um diretório de documentos com todas as informações necessárias para começar.
P: Onde posso encontrar as regras específicas do Azure?
Todas as regras do Azure estão disponíveis no repositório GitHub do appcat Rulesets.
P: Onde posso encontrar mais informações sobre como criar regras personalizadas?
Consulte o Guia de Desenvolvimento de Regras para Azure Migrate aplicativo e avaliação de código para Java.
P: Onde posso obter ajuda ao criar regras personalizadas?
A melhor maneira de obter ajuda é criar um problema no repositório GitHub appcat-rulesets.