Introdução: conhecendo o erro que assusta iniciantes
Você escreveu um programa em Java, compilou, empacotou em um arquivo JAR e, orgulhosamente, tenta executá-lo com um clique duplo — mas, em vez da janela do aplicativo, vê uma janela preta de terminal com a mensagem assustadora: Can't execute jar- file: "no main manifest attribute". Familiar? Se não — considere-se sortudo (por enquanto).
Este erro é um dos mais populares no Stack Overflow. Imagine só: milhares de desenvolvedores, de estudantes a engenheiros experientes, já enfrentaram pelo menos uma vez o fato de seu arquivo JAR "se recusar" a executar. Por que isso acontece? A questão é que Java não é simplesmente "empacote e execute". A máquina virtual precisa saber claramente: qual classe contém o ponto de entrada? Sem essa informação, o arquivo JAR permanece apenas um arquivo comum, não um programa executável.
Neste artigo, vamos entender o que é o manifesto, como ele se relaciona com o ponto de entrada e — o mais importante — como fazer com que seu arquivo JAR seja executado sem erros. Iremos do simples ao complexo: da compilação manual na linha de comando à configuração da IDE. Vamos lá!
O que é o manifesto e para que serve?
Cada arquivo JAR (Java Archive) contém internamente uma pasta META-INF, e dentro dela, o arquivo MANIFEST.MF. Isso não é apenas um artefato técnico, mas sim um verdadeiro "manual de instruções" para a máquina virtual Java.
Imagine um livro sem sumário. Você sabe que ele tem capítulos, mas não sabe em qual página começar a ler. Mais ou menos a mesma coisa acontece com um arquivo JAR sem a indicação da classe principal. A máquina virtual vê várias classes, mas não sabe qual delas contém o método public static void main(String[] args).
Um arquivo MANIFEST.MF típico se parece com isso:
Manifest-Version: 1.0Created-By: 17.0.2 (Oracle Corporation)Main-Class: com.example.MainA linha mais importante aqui é Main-Class. Ela indica o nome completo da classe (com pacote) que o Java deve executar. Se esta linha estiver ausente ou incorreta — você obtém o famoso erro "no main manifest attribute".
Por que o manifesto pode estar vazio ou incorreto?
- Compilação manual com
jar— se você não usou a flag-eou não criou seu próprio manifesto. - Compilação na IDE sem configuração — alguns ambientes de desenvolvimento (especialmente versões antigas) não adicionam
Main-Classautomaticamente. - Descuido na nomenclatura — por exemplo, você escreveu
maincom letra minúscula ou esqueceu de especificar o pacote. - Codificação e formatação — no manifesto, cada linha em branco no final do arquivo é importante.
Como criar um arquivo JAR executável: três maneiras
Maneira 1. Linha de comando (controle manual)
Este método proporciona uma compreensão total do processo. Suponha que temos uma classe simples HelloWorld.java:
package com.example;
public class HelloWorld { public static void main(String[] args) { System.out.println("Olá, mundo! O JAR está funcionando!"); }}Passo 1. Compilar a classe
javac -d . HelloWorld.javaA flag -d . cria a estrutura de pacotes (com/example/HelloWorld.class).
Passo 2. Criar o manifesto manualmente
Crie um arquivo MANIFEST.MF (por exemplo, no bloco de notas) com o seguinte conteúdo:
Manifest-Version: 1.0Main-Class: com.example.HelloWorldImportante: após a última linha, deve haver obrigatoriamente uma linha em branco! Sem ela, o arquivo JAR pode não ler o manifesto.
Passo 3. Criar o JAR
jar cfm HelloWorld.jar MANIFEST.MF com/example/HelloWorld.classA flag
Blogs
Book Recommendations
Leia também
Refatoração de código Kotlin: quando é necessária e como fazer corretamente
Concorrência e Multithreading em Java: do A ao Z
«out» em Kotlin: entendendo a covariância com exemplos e perguntas
Trabalhando com bancos de dados em Kotlin: PostgreSQL e MongoDB para iniciantes
Como passar em uma entrevista de TypeScript: principais perguntas de nível avançado