Java sem IDE e sem build tool

2 respostas
FrancoC

Estou tentando compreender um pouco como funciona o java por debaixo dos panos.

Criei uma aplicacao de teste HelloWorld com a seguinte estrutura de diretórios:

WORKDIR
    +etc
        log4j.properties
    +META-INF
        persistence.xml
    +lib
        <todas as bibliotecas necessárias>
    +bin
        <classes do src compiladas>
    +src
        +hello
            HelloWorld.java
            Message.java

HelloWorld e Message pertecem ao pacote hello e HelloWorld possue um método main. A classe HelloWorld possui dependencia com as bilbiotecas localizadas no diretório lib da raiz do projeto.
Quando inicio a JVM a para carregar e executar esta classe utilizo a seguinte linha de comando: java -classpath bin hello.HelloWorld
E recebo o seguinte retorno no console:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/Persistence at hello.HelloWorld.main(Unknown Source) Caused by: java.lang.ClassNotFoundException: javax.persistence.Persistence at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 1 more

Preciso incluir as classes que estão no diretório lib no classpath. Tentei fazer isso separando os diretório por ponto-e-virgula “;”, mas nao deu certo: java -classpath bin;lib hello.HelloWorld

Como é possível fazer isso?

2 Respostas

thiago.correa

-classpath você indica aonde estão as libs (jars) utilizados pela sua aplicação!

E

Para o Java, um arquivo .jar é mais ou menos como se fosse um diretório. Portanto, você precisa listar cada jar do diretório lib que é usado. POr exemplo:

// No Windows, separe os argumentos por ";"
java -classpath bin;lib\blabla.jar;lib\bleble.jar hello.HelloWorld
// No Linux, separe os argumentos por ":"
java -classpath bin:lib/blabla.jar:lib/bleble.jar hello.HelloWorld

Acho que no Java 6 é possível mencionar arquivos .jar com um “*”, mas não tenho certeza. Veja se é possível usar:

java -classpath bin;lib\*.jar hello.HelloWorld
Criado 21 de setembro de 2010
Ultima resposta 21 de set. de 2010
Respostas 2
Participantes 3