Compilei um arquivo JAR e especifiquei a classe principal no manifesto (usei a função Exportar Eclipse ). Minhas dependências estão todas em um diretório rotulado lib
. Não consigo obter uma resposta direta sobre como executar meu arquivo JAR enquanto especifico que ele deve usar o lib/*
como o caminho de classe.
Eu tentei:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
etc ...
Cada um dá um erro dizendo:
Error: Could not find or load main class ....
ou dá a NoClassDefFoundError
indicação de que as bibliotecas não estão sendo encontradas.
Eu até tentei refazer o arquivo JAR e incluí o lib
diretório e o conteúdo, mas ainda sem dados ...
Como posso executar um arquivo JAR na linha de comando e especificar o caminho de classe a ser usado?
java
shell
command-line
classpath
SnakeDoc
fonte
fonte
Respostas:
Ao especificar
-jar
, o-cp
parâmetro será ignorado.Da documentação :
Você também não pode "incluir" os arquivos jar necessários em outro arquivo jar (você precisaria extrair seu conteúdo e colocar os arquivos .class em seu arquivo jar)
Você tem duas opções:
lib
diretório no manifesto (você pode usar caminhos relativos lá)-cp
:java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
fonte
unzip MyJar.jar lib/*.jar
. Então, como você sugere, eles podem executarjava -cp MyJar.jar:lib/* ...
Execute um arquivo jar e especifique um caminho de classe como este:
jar_name.jar
é o nome completo do JAR que você deseja executarlibs/*
é um caminho para seus JARs de dependênciacom.test.App
é o nome totalmente qualificado da classe do JAR que possui omain(String[])
métodoO jar e o jar dependente devem ter permissões de execução.
fonte
Você pode fazer isso no shell do Unix:
Você pode fazer isso no Windows PowerShell:
fonte
Alternativamente, use o manifesto para especificar o caminho da classe e a classe principal, se desejar, então você não precisa usar
-cp
ou especificar a classe principal. No seu caso, conteria linhas como esta:Infelizmente, você precisa soletrar cada jar no manifesto (não é nada demais, já que você faz apenas uma vez, e você pode usar um script para construir o arquivo ou usar uma ferramenta de construção como ANT ou Maven ou Gradle). E a referência deve ser um diretório relativo ou absoluto para onde você executa o
java -jar MyJar.jar
.Em seguida, execute-o com
fonte
Você pode executar um Runtime.getRuntime.exec (comando) para reiniciar o jar incluindo classpath com args.
fonte