Forma abreviada: Se o seu main estiver dentro de um jar, você provavelmente precisará de um adicional '-jar pathTo / yourJar / YourJarsName.jar' declarado explicitamente para fazê-lo funcionar (mesmo que 'YourJarsName.jar' esteja no caminho de classe) (ou , expressa para responder à pergunta original que foi feita há 5 anos: você não precisa redeclarar cada frasco explicitamente, mas parece que, mesmo com java6, você precisa redeclarar seu próprio frasco ...)
Forma Longa: (Eu expliquei isso ao ponto que espero que até intrusos no java possam fazer uso disso)
Como muitos aqui, estou usando o eclipse para exportar jarros: (Arquivo-> Exportar -> 'Arquivo JAR Runnable'). Existem três opções nas ofertas do eclipse 'Library handling' (Juno):
opt1: "Extract required libraries into generated JAR"
opt2: "Package required libraries into generated JAR"
opt3: "Copy required libraries into a sub-folder next to the generated JAR"
Normalmente, eu usaria opt2 (e opt1 estava definitivamente quebrando), no entanto, o código nativo em um dos jarros que estou usando descobri quebras com o prático truque "jarinjar" que o eclipse utiliza quando você escolhe essa opção. Mesmo depois de perceber que eu precisava do opt3 e encontrar a entrada StackOverflow, ainda levei algum tempo para descobrir como iniciar meu principal fora do eclipse, então aqui está o que funcionou para mim, pois é útil para outros ...
Se você nomeou seu jar: "fooBarTheJarFile.jar" e tudo está definido para exportar para o diretório: "/ theFully / qualificadoPath / toYourChosenDir".
(significando que o campo 'Exportar destino' será: '/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar')
Depois de concluir, você encontrará o eclipse e colocará todas as bibliotecas em uma pasta chamada 'fooBarTheJarFile_lib' dentro desse diretório de exportação, oferecendo algo como:
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar01.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar02.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar03.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar04.jar
Você pode iniciar a partir de qualquer lugar no seu sistema com:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Para iniciantes em Java: 'package.path_to.the_class_with.your_main' é o caminho do pacote declarado que você encontrará na parte superior do arquivo 'TheClassWithYourMain.java' que contém os 'main (String [] args) {.. .} 'que você deseja executar de fora do java)
A armadilha a ser observada: é que ter 'fooBarTheJarFile.jar' na lista de jars no caminho de classe declarado não é suficiente. Você precisa declarar explicitamente '-jar' e redeclarar a localização desse jar.
por exemplo, isso quebra:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
atualizado com caminhos relativos:
cd /theFully/qualifiedPath/toYourChosenDir/;
BREAKS: java -cp "fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" -jar package.path_to.the_class_with.your_main.TheClassWithYourMain
WORKS: java -cp ".;fooBarTheJarFile_lib/*" -jar fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(usando a versão java "1.6.0_27"; via VM do servidor OpenJDK de 64 bits no ubuntu 12.04)