Então eu criei um projeto no eclipse, e eu quero criar um arquivo JAR com ele. A pasta do projeto contém as seguintes pastas:
- src (contém dois pacotes)
- Bibliotecas do sistema JRE
- Bibliotecas referenciados ( "jasypt-1.9.2.jar" e "json_simple-1.1.jar")
- libs (novamente: "jasypt-1.9.2.jar" e "json_simple-1.1.jar")
- recursos (contendo imagens e arquivos)
Se eu for para: rclick no nome do projeto -> Propriedades -> Java Build Path -> Bibliotecas
Eu vejo as duas bibliotecas corretamente adicionadas ao caminho de compilação.
Então eu vou para rclick em nome do projeto -> exportação-> arquivo JAR e aqui eu exporto tudo (só para ter certeza ..!). Então eu coloquei o MainClass como ponto de entrada e, em seguida, o arquivo JAR é criado sem qualquer problema.
Quando eu extraio o arquivo JAR (registry.jar), vejo que ele contém tudo de que precisa: [package1, package2, META-INF, libs, recursos, .classpath, .project]
Além disso, o .classpath está correto (pelo menos, parece-me .. não 100% de certeza!):
<?xml version="1.0" encoding="utf-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry exported="true" kind="lib" path="libs/jasypt-1.9.2.jar"/>
<classpathentry exported="true" kind="lib" path="libs/json_simple-1.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
MAS, então, quando vou executar o arquivo registry.jar na linha de comando (tanto no Windows quanto no Ubuntu), assim:
java -jar registry.jar
eu recebo:
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
at ...
at ...
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException
at java.net.URLClassLoader$1.run<Unknown Source>
at ...
at ...
... lots more
O programa compila e funciona perfeitamente dentro do eclipse. Eu simplesmente não consigo descobrir qual é o problema ...
Respostas:
0 para resposta № 1o .classpath
arquivo não tem significado para Java. É usado apenas pelo Eclipse. Java não reconhece que as bibliotecas necessárias estão sob o lib
entrada no arquivo Jar.
Você teria que incluir o caminho das bibliotecas através do comando:
java -jar registry.jar -cp lib
onde neste caso lib
é uma pasta que reside ao lado do Jar exportado.
Se você está usando o Maven, você pode o plugin de montagem para gerar um arquivo executável. Como posso criar um JAR executável com dependências usando o Maven?.