Qual é a diferença no eclipse entre exportar como um arquivo JAR e exportar como um arquivo JAR executável? Ambos não são executáveis? Quais são os prós / contras de cada um?
Qual é a diferença no eclipse entre exportar como um arquivo JAR e exportar como um arquivo JAR executável? Ambos não são executáveis? Quais são os prós / contras de cada um?
Respostas:
O jar executável contém um arquivo MANIFEST.MF, que define a classe principal a ser executada quando o jar é executado.
Jars não executáveis são apenas bibliotecas de classes, que podem ser adicionadas ao caminho de classe para que o código seja reutilizado (ele também contém o arquivo de manifesto, mas nenhuma classe principal lá)
Um jar executável é um arquivo jar que possui um arquivo Manifest incorporado que inclui a declaração "Main-Class:". A "Main-Class" deve ser definida para que o tempo de execução do java saiba qual classe chamar quando o jar for "executado". Se um jar não inclui um manifesto com a "classe principal:", ele não é considerado um "jar executável" - é apenas uma biblioteca de código Java.
Eu acho que essa é a diferença em como o Eclipse exporta o jar, mas não tenho 100% de certeza.
Veja este link para mais informações: http://www.skylit.com/javamethods/faqs/createjar.html
Com o arquivo JAR padrão, você deve especificar a classe com o método principal na linha de comando ao executar o jar. Com um JAR executável, há um arquivo de manifesto que conterá essas informações para que você possa apenas digitar java -jar myRunnable.jar
ou simplesmente clicar duas vezes nele.
No meu caso, costumava exportar como um jar quando tinha todas as classes principais e todos os diretórios do caminho das bibliotecas especificados no manifest.mf. Se muitos aplicativos estiverem usando a mesma biblioteca, não será necessário exportar a biblioteca compartilhada para cada jar. Isso torna o funcionamento do jar mais rápido. Mas, muitas vezes, devido a problemas de configuração em um caminho de classe de servidor diferente, não é possível acessar a biblioteca e, nesse caso, faz sentido exportar o jar executável que torna a execução do arquivo lenta e grande.