Por que falha ao carregar o atributo de manifesto da class principal de um arquivo JAR?

Eu criei um arquivo JAR dessa maneira jar cf jar-file input-files . Agora estou tentando executá-lo. Executá-lo não funciona (o comando jre não foi encontrado):

 jre -cp app.jar MainClass 

Isso não funciona:

 java -jar main.jar 

(Falha ao carregar o atributo de manifesto Main-Class do main.jar).

Eu também descobri que

Para executar um aplicativo empacotado como um arquivo JAR (versão 1.2 – requer header de manifesto Main-Class)

O que é o “header de manifesto da class principal”? Como crio e onde coloco?

Não tenho certeza se acredito em seus sintomas:

  • Se o comando jre não for encontrado, a execução do jre -cp app.jar deverá dar o mesmo erro
  • Apenas adicionar um arquivo JAR ao caminho de class não deve dar o erro que você está vendo

Eu esperaria que você veja esse erro se você executar:

 java -jar app.jar 

O header Main-Class precisa estar no manifesto do arquivo JAR – isto é, metadados sobre coisas como outras bibliotecas necessárias. Veja a documentação da Sun para saber como criar um manifesto apropriado. Basicamente, você precisa criar um arquivo de texto que inclua uma linha como esta:

 Main-Class: MainClass 

Então corra

 jar cfm app.jar manifest.txt *.class 
  1. definir o classpath e compilar

    javac -classpath “C: \ Arquivos de programas \ Java \ jdk1.6.0_ updateVersion \ tools.jar” yourApp.java

  2. criar manifest.txt

    Main-class: yourApp newline

  3. crie seu app.jar

    jar cvf0m yourApp.jar manifest.txt yourApp.class

  4. execute yourApp.jar

    java -jar yourApp.jar

Você pode rodar com:

 java -cp .;app.jar package.MainClass 

Isso funciona para mim se não houver manifesto no arquivo JAR.

Eu recebi este erro, e foi porque eu tinha os argumentos na ordem errada:

CORRIGIR

 java maui.main.Examples tagging -jar maui-1.0.jar 

ERRADO

 java -jar maui-1.0.jar maui.main.Examples tagging 

A maneira mais fácil de ter certeza de que você criou o arquivo JAR executável corretamente, com o arquivo de manifesto apropriado, é usar o Eclipse para construí-lo para você. Em seu projeto Eclipse, você basicamente seleciona File / Export no menu e segue os prompts.

Dessa forma, você pode ter certeza de que seu arquivo JAR está correto e saberá procurar em outro lugar se ainda houver algum problema. O processo é descrito na íntegra em FAQ Como criar um arquivo JAR executável para um programa SWT autônomo? .

Eu descobri que também estava tendo esse erro no NetBeans. Espero que o seguinte seja útil.

  1. Certifique-se de que quando você for para a Configuração do Projeto, defina a class principal que você pretende executar.
  2. Faça um Build ou Clean Build
  3. Coloque o arquivo jar onde você deseja e tente: java -jar “YourProject.jar” novamente na linha de comando.

Este foi o problema que eu estava recebendo porque eu tinha outros programas de “teste” que eu estava usando no NetBeans e eu tive que garantir que a class principal na parte de execução da configuração do projeto foi definida corretamente.

muitas bênçãos, John P

Eu estava recebendo o mesmo erro quando corri:
jar cvfm test.jar Test.class Manifest.txt

O que resolveu foi isso:
jar cvfm test.jar Manifest.txt Test.class

Meu manifesto tem o ponto de input conforme informado nos documentos do oracle (verifique se há um novo caractere de linha no final do arquivo):
Classe Principal: Teste

Experimentar

 java -cp .:mail-1.4.1.jar JavaxMailHTML 

não há necessidade de ter arquivo de manifest .

Eu enfrentei o mesmo problema. Este comando unix não é capaz de encontrar a class principal. Isso ocorre porque as versões JDK do tempo de execução e de compilation são diferentes. Faça o jar por meio do eclipse depois de alterar a versão do compilador java. O link a seguir me ajudou.

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

Tente executar o jar criado após este passo e, em seguida, execute-o

Se o caminho da sua class estiver totalmente especificado no manifesto, talvez você precise da última versão do Java Runtime Environment. Meu problema corrigido quando eu reinstalei o jre 8.

Se você estiver usando o eclipse, tente abaixo: 1. Clique com o botão direito no projeto -> selecione Exportar 2. Selecione o arquivo Jar Runnable no destino de exportação selecionado. 3. Digite o nome do jar e selecione “Package required …” (segundo radio button) -> Concluir

Espero que isto ajude…!