O pacote javax no Java reúne APIs de diferentes áreas, como interface gráfica, acessibilidade, compilação, criptografia, processamento de imagens, monitoramento, acesso a dados e serviços corporativos.
Entretanto, as mudanças introduzidas pelo sistema de módulos do Java 9, a remoção de algumas tecnologias no Java 11 e a evolução do Java EE para Jakarta EE geraram uma dúvida comum: afinal, o javax ainda existe?
Sim, diversos pacotes iniciados por javax continuam fazendo parte do Java SE moderno. Por outro lado, algumas APIs corporativas foram removidas do JDK ou passaram a utilizar o namespace jakarta.*.
Neste guia, você entenderá quais pacotes continuam disponíveis, quais deixaram de acompanhar o JDK e quando é necessário utilizar Jakarta EE.

O que é o pacote javax no Java?
Embora seja comum utilizar a expressão pacote javax, tecnicamente javax funciona como um namespace que agrupa diferentes pacotes e APIs.
Esses pacotes complementam as funcionalidades presentes em namespaces como java.lang, java.util, java.io e java.net. Além disso, alguns deles fornecem recursos específicos para interfaces gráficas, segurança, criptografia, compilação, processamento de imagens e aplicações corporativas.
Por exemplo, o pacote javax.swing, em conjunto com as APIs de java.awt, oferece componentes para a criação de interfaces gráficas. Já javax.crypto disponibiliza recursos relacionados à criptografia. Por sua vez, javax.annotation.processing permite criar processadores de anotações executados durante a compilação.
Portanto, javax não representa uma única biblioteca nem uma tecnologia exclusiva do antigo Java EE.
Esse ponto é fundamental porque muitos pacotes javax.* pertencem ao Java SE e continuam presentes nas versões modernas da plataforma. Na documentação do Java SE 25, por exemplo, ainda encontramos pacotes javax nos módulos java.base, java.desktop e java.compiler.
O pacote javax foi removido no Java 9?
Não. A afirmação de que o pacote javax deixou de existir a partir do Java 9 está incorreta.
O Java 9 introduziu o Java Platform Module System, também conhecido como sistema de módulos. Com isso, as APIs do JDK passaram a ser organizadas em módulos como:
java.base;java.desktop;java.compiler;java.management;java.sql;java.xml.
Consequentemente, diversos pacotes javax apenas passaram a pertencer formalmente a determinados módulos.
Por exemplo:
javax.cryptopassou a integrar o módulojava.base;javax.accessibilitypassou a integrarjava.desktop;javax.imageiopassou a integrarjava.desktop;javax.annotation.processingpassou a integrarjava.compiler.
Portanto, o Java 9 não eliminou o namespace javax. Na verdade, ele reorganizou muitas APIs dentro do novo sistema modular.
O que foi removido no Java 11?
Embora o Java 9 não tenha removido todos os pacotes javax, alguns módulos relacionados ao Java EE e ao CORBA foram marcados para remoção nessa versão.
Posteriormente, no Java 11, esses módulos foram efetivamente retirados do JDK.
Entre as tecnologias removidas estavam:
- JAX-WS;
- JAXB;
- JavaBeans Activation Framework;
- Common Annotations;
- CORBA;
- parte da Java Transaction API;
- ferramentas relacionadas a Web Services e XML Binding.
Isso afetou pacotes como:
javax.activation;javax.annotation;javax.jws;javax.xml.bind;javax.xml.soap;javax.xml.ws;javax.activity.
Em outras palavras, essas APIs não desapareceram necessariamente de todo o ecossistema Java. Entretanto, elas deixaram de vir incluídas automaticamente no JDK. Assim, aplicações que dependem delas precisam utilizar bibliotecas externas ou versões correspondentes do ecossistema Jakarta EE.
Essa mudança foi formalizada pelo JEP 320 do OpenJDK, que documenta a remoção dos módulos Java EE e CORBA do JDK 11. O documento detalha tecnologias como JAX-WS, JAXB, JavaBeans Activation Framework, Common Annotations e CORBA.
Resumo dos pacotes apresentados neste artigo
| Pacote | Situação no Java moderno | Módulo ou alternativa |
|---|---|---|
javax.accessibility | Continua no Java SE | java.desktop |
javax.activation | Removido do JDK no Java 11 | Jakarta Activation ou dependência externa |
javax.activity | Removido do JDK no Java 11 | Tecnologia legada ligada ao CORBA |
javax.annotation | Removido do JDK no Java 11 | Jakarta Annotations ou dependência externa |
javax.annotation.processing | Continua no Java SE | java.compiler |
javax.crypto | Continua no Java SE | java.base |
javax.crypto.interfaces | Continua no Java SE | java.base |
javax.crypto.spec | Continua no Java SE | java.base |
javax.imageio | Continua no Java SE | java.desktop |
javax.imageio.event | Continua no Java SE | java.desktop |
javax.imageio.metadata | Continua no Java SE | java.desktop |
javax.imageio.plugins.bmp | Continua no Java SE | java.desktop |
javax.imageio.plugins.jpeg | Continua no Java SE | java.desktop |
javax.imageio.spi | Continua no Java SE | java.desktop |
javax.imageio.stream | Continua no Java SE | java.desktop |
javax.accessibility
O pacote javax.accessibility define um contrato entre componentes de interface gráfica e tecnologias assistivas.
Por meio dele, leitores de tela, ampliadores e outras ferramentas de acessibilidade podem obter informações sobre os elementos apresentados por uma aplicação Java.
Esse pacote continua fazendo parte do Java SE e está localizado no módulo java.desktop. Entre suas principais interfaces e classes estão:
Accessible;AccessibleContext;AccessibleAction;AccessibleComponent;AccessibleRole;AccessibleState;AccessibleText;AccessibleValue.
Assim, uma aplicação Swing pode fornecer nomes, descrições, estados e funções para componentes visuais, facilitando sua utilização por pessoas que dependem de tecnologias assistivas.
Exemplo de acessibilidade com Swing
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class ExemploAcessibilidade {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JButton botao = new JButton("Salvar");
botao.getAccessibleContext()
.setAccessibleName("Salvar cadastro");
botao.getAccessibleContext()
.setAccessibleDescription(
"Salva os dados preenchidos no formulário"
);
JFrame janela = new JFrame("Exemplo de acessibilidade");
janela.add(botao);
janela.setSize(350, 150);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setLocationRelativeTo(null);
janela.setVisible(true);
});
}
}
Nesse exemplo, o componente recebe um nome e uma descrição acessíveis. Dessa forma, uma tecnologia assistiva pode transmitir ao usuário informações mais claras sobre a finalidade do botão.
javax.activation
O pacote javax.activation fazia parte do JavaBeans Activation Framework, conhecido como JAF.
Essa API era usada para identificar tipos de dados e associá-los a determinadas ações. Além disso, aparecia frequentemente em tecnologias relacionadas a e-mail, anexos, Web Services e processamento de conteúdo MIME.
No Java 9, o módulo java.activation foi marcado como obsoleto e destinado à remoção. Em seguida, no Java 11, ele deixou de fazer parte do JDK.
Portanto, não é correto afirmar que javax.activation deixou de existir imediatamente no Java 9. A remoção efetiva ocorreu no Java 11.
Em projetos modernos, a funcionalidade correspondente pode ser obtida por meio de uma dependência externa. No ecossistema Jakarta EE, ela é oferecida pela especificação Jakarta Activation.
javax.activity
O pacote javax.activity continha exceções relacionadas ao serviço de atividades utilizado na integração com transações distribuídas e CORBA.
No Java 9, ele estava localizado no módulo java.corba. Entretanto, como o suporte ao CORBA foi removido do JDK no Java 11, javax.activity também deixou de acompanhar o Java SE.
Além disso, o OpenJDK esclarece que esse pacote estava diretamente ligado à interoperabilidade com os serviços de transação do CORBA. Portanto, ele não possui utilidade comum em aplicações Java modernas.
Aplicações antigas que ainda dependem dessa tecnologia precisam passar por uma análise de arquitetura e migração. Simplesmente procurar um pacote com o mesmo nome pode não ser suficiente.
javax.annotation
O pacote javax.annotation reunia anotações comuns utilizadas por diferentes tecnologias Java, como:
@PostConstruct;@PreDestroy;@Resource;@Generated.
No Java 9, essas anotações foram organizadas no módulo java.xml.ws.annotation, que foi marcado para remoção.
Posteriormente, no Java 11, esse módulo deixou de fazer parte do JDK. Assim, aplicações que ainda usam essas anotações precisam adicionar uma dependência externa ou migrar para a API correspondente do Jakarta EE.
A partir do Jakarta EE 9, as APIs corporativas migraram do namespace javax.* para jakarta.*. Consequentemente, um projeto moderno pode utilizar imports como:
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
Entretanto, não se deve substituir todos os imports iniciados por javax de forma automática. A mudança de namespace vale para as APIs que fazem parte do Jakarta EE, e não para pacotes pertencentes ao Java SE. A própria especificação Jakarta EE 9 explica que a mudança exige a atualização dos imports das APIs corporativas de javax para jakarta.
javax.annotation.processing
O pacote javax.annotation.processing é diferente de javax.annotation.
Ele continua fazendo parte do Java SE e está localizado no módulo java.compiler.
Sua finalidade é permitir a criação de processadores de anotações. Esses processadores podem analisar o código durante a compilação, validar estruturas, emitir mensagens e gerar novos arquivos-fonte.
Entre seus principais componentes estão:
Processor;AbstractProcessor;ProcessingEnvironment;RoundEnvironment;Filer;Messager;SupportedAnnotationTypes;SupportedSourceVersion.
Além disso, o pacote contém javax.annotation.processing.Generated, que pode ser usada para indicar que determinado código foi gerado automaticamente.
Portanto, não confunda:
javax.annotation
com:
javax.annotation.processing
O primeiro estava relacionado às Common Annotations retiradas do JDK. Já o segundo continua sendo uma API oficial do Java SE.
javax.crypto
O pacote javax.crypto fornece classes e interfaces para operações criptográficas.
Entre as operações disponíveis estão:
- criptografia;
- descriptografia;
- geração de chaves;
- acordo de chaves;
- códigos de autenticação de mensagens;
- fluxos criptografados;
- objetos selados.
Algumas de suas classes mais conhecidas são:
Cipher;KeyGenerator;SecretKey;SecretKeyFactory;KeyAgreement;Mac;CipherInputStream;CipherOutputStream;SealedObject.
Esse pacote continua fazendo parte do Java SE e está localizado no módulo fundamental java.base. Portanto, ele não foi removido nem substituído pelo Jakarta EE.
javax.crypto.interfaces
O pacote javax.crypto.interfaces oferece interfaces relacionadas a chaves criptográficas, especialmente chaves Diffie-Hellman.
Ele também continua presente no módulo java.base.
javax.crypto.spec
Já javax.crypto.spec fornece classes para representar especificações de chaves e parâmetros utilizados por algoritmos criptográficos.
Entre suas classes estão estruturas utilizadas para configurar chaves secretas, vetores de inicialização e parâmetros de diferentes algoritmos.
Assim como os demais pacotes de criptografia apresentados nesta seção, ele permanece disponível no Java SE moderno.
Recursos criptográficos devem ser utilizados com cuidado. Em aplicações reais, prefira algoritmos modernos, configurações seguras e bibliotecas bem mantidas. Evite inventar protocolos criptográficos próprios.
javax.imageio
O pacote javax.imageio é a base da API Java Image I/O.
Por meio dele, uma aplicação pode ler, escrever e converter imagens em diferentes formatos.
A classe mais utilizada é ImageIO, que fornece métodos estáticos para operações comuns. Além disso, a API possui mecanismos para controlar a leitura e a escrita, trabalhar com metadados e adicionar novos plug-ins de formatos.
Esse pacote continua fazendo parte do Java SE dentro do módulo java.desktop. A implementação padrão oferece suporte de leitura e escrita para formatos como BMP, GIF, JPEG, PNG, TIFF e WBMP.
Exemplo de leitura e gravação de imagem
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ExemploImageIO {
public static void main(String[] args) {
File arquivoEntrada = new File("entrada.png");
File arquivoSaida = new File("saida.jpg");
try {
BufferedImage imagem = ImageIO.read(arquivoEntrada);
if (imagem == null) {
throw new IOException(
"O formato da imagem não é compatível."
);
}
boolean gravou = ImageIO.write(
imagem,
"jpg",
arquivoSaida
);
if (!gravou) {
throw new IOException(
"Nenhum gravador foi encontrado para o formato JPG."
);
}
System.out.println("Imagem convertida com sucesso.");
} catch (IOException e) {
System.err.println(
"Não foi possível processar a imagem: "
+ e.getMessage()
);
}
}
}
Nesse exemplo, uma imagem PNG é carregada e gravada no formato JPEG.
javax.imageio.event
O pacote javax.imageio.event contém interfaces utilizadas para receber notificações durante a leitura e a gravação de imagens.
Por exemplo, uma aplicação pode acompanhar:
- progresso da leitura;
- progresso da escrita;
- avisos emitidos pelo leitor;
- interrupções de uma operação.
Esse pacote continua presente no módulo java.desktop.
javax.imageio.metadata
O pacote javax.imageio.metadata oferece recursos para representar, consultar e modificar metadados associados a imagens.
Esses metadados podem incluir informações como:
- dimensões;
- formato;
- resolução;
- paleta;
- transparência;
- propriedades específicas do arquivo.
Ele também permanece no módulo java.desktop.
javax.imageio.plugins.bmp
O pacote javax.imageio.plugins.bmp contém classes públicas relacionadas ao plug-in BMP incorporado ao Java.
Ele pode ser utilizado para configurar determinados parâmetros durante a leitura ou a gravação de imagens nesse formato.
Esse pacote continua presente nas versões modernas do Java SE dentro do módulo java.desktop.
javax.imageio.plugins.jpeg
O pacote javax.imageio.plugins.jpeg oferece classes relacionadas ao plug-in JPEG incorporado.
Por meio dele, é possível trabalhar com parâmetros específicos do formato, incluindo aspectos relacionados à compressão e à codificação.
Assim como o pacote de suporte ao BMP, ele continua presente no módulo java.desktop.
Além disso, as versões modernas do Java também incluem o pacote javax.imageio.plugins.tiff, destinado às classes públicas do plug-in TIFF.
javax.imageio.spi
O pacote javax.imageio.spi contém interfaces de provedor de serviços para a API Image I/O.
Essas interfaces permitem que bibliotecas e desenvolvedores adicionem novos:
- leitores;
- gravadores;
- transcodificadores;
- fluxos de entrada;
- fluxos de saída.
Além disso, ele fornece um registro usado em tempo de execução para localizar implementações compatíveis.
Portanto, uma aplicação não precisa ficar limitada aos formatos fornecidos diretamente pelo JDK. Novos formatos podem ser adicionados por plug-ins de terceiros.
javax.imageio.stream
O pacote javax.imageio.stream fornece abstrações de entrada e saída de baixo nível utilizadas pela API de imagens.
Entre suas principais interfaces estão:
ImageInputStream;ImageOutputStream.
Essas interfaces permitem operações como leitura aleatória, posicionamento dentro do fluxo e controle da ordem dos bytes.
O pacote permanece disponível no módulo java.desktop.
Qual é a diferença entre javax e jakarta?
A mudança de javax para jakarta ocorreu principalmente nas APIs corporativas que faziam parte do Java EE e passaram a ser mantidas pela Eclipse Foundation no Jakarta EE.
A partir do Jakarta EE 9, os pacotes dessas especificações mudaram de nome.
Por exemplo:
import javax.annotation.PostConstruct;
passou a ser:
import jakarta.annotation.PostConstruct;
Da mesma forma:
import javax.persistence.Entity;
passou a ser:
import jakarta.persistence.Entity;
Entretanto, vários pacotes javax continuam pertencendo ao Java SE e não devem ser alterados.
Estes imports, por exemplo, continuam corretos:
import javax.swing.JButton;
import javax.crypto.Cipher;
import javax.imageio.ImageIO;
import javax.annotation.processing.Processor;
Portanto, a regra não é substituir todo javax por jakarta. Antes de realizar uma migração, é necessário identificar se o pacote pertence ao Java SE ou ao antigo Java EE.
Conclusão
O pacote javax no Java não desapareceu.
Diversas APIs iniciadas por javax continuam fazendo parte do Java SE moderno, incluindo recursos de:
- interface gráfica;
- acessibilidade;
- criptografia;
- compilação;
- processamento de anotações;
- imagens;
- monitoramento;
- acesso a dados.
Por outro lado, alguns módulos associados ao Java EE e ao CORBA foram marcados para remoção no Java 9 e efetivamente retirados do JDK no Java 11.
Além disso, as APIs corporativas do Jakarta EE passaram a utilizar o namespace jakarta.* a partir do Jakarta EE 9.
Consequentemente, a análise correta deve ser feita pacote por pacote. Alguns imports javax continuam atuais e necessários. Outros precisam de dependências externas ou devem ser migrados para Jakarta EE.
Em resumo:
- nem todo
javaxpertence ao Java EE; - o Java 9 não removeu todo o namespace
javax; - várias APIs foram apenas organizadas em módulos;
- alguns módulos foram removidos no Java 11;
- APIs corporativas modernas usam
jakarta.*; - pacotes do Java SE, como Swing, Image I/O e criptografia, continuam usando
javax.*.
Referências
- Documentação oficial da API Java SE 25 — módulos
java.base,java.desktopejava.compiler. - OpenJDK — JEP 320: remoção dos módulos Java EE e CORBA do JDK 11.
- Especificação oficial do Jakarta EE 9 — migração do namespace
javaxparajakarta. - SANTOS, Rui Rossi dos. Programação de Computadores em Java.




