Ola galera,
é os seguinte, estou usando Ubuntu e não entendo nada de Linux, porem acho que nao é esse o problema . Eu tenho 2 jars e 1 arquivo java dentro de um mesmo diretorio, preciso compilar apontando para as jars, estou fazendo da seguinte maneira:
javac -cp jar1.jar;jar2.jar arquivo.java
mais nao funciona, da o seguinte erro:
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options
jar2.jar: command not found
se eu compilo apenas com uma jar da seguinte maneira funciona, porem nao compila pois eu preciso da outra tbm:
No Linux, você separa os “jars” com “:”, não com “;”, que tem significado especial para o shell. (Ele serve para separar comandos - você pode ter N comandos em uma mesma linha, bastando separá-los com um “;”).
hun… eu nao acredito que era soh isso cara…valeu msm :lol:
mais estranho pq agora quando eu rodo com o comando:
java -cp jar1.jar:jar2.jar arquivo.java
ele da a exception:
Exception in thread "main" java.lang.NoClassDefFoundError: arquivo
Caused by: java.lang.ClassNotFoundException: arquivo
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: arquivo. Program will exit.
vc sabe pq isso acontece sendo que a classe esta la?!
import jar1.*;
import jar2.*;
public class arquivo {
public static void main(String argv[]) {
...
}
}
esse é meu codigo, nao vejo o que pode estar errado…
obs: eu sei que nome de classe é maiusculo antes que alguem fle neh xD, masi eh que eh uma classe que eu jah peguei pronta, soh estou testando, entao nao vou modific-la, mais tambem jah testei com a classe abaixo e nao deu tambem:
public class Teste {
public static void main(String argv[]) {
...
}
}
Ola, valeu funcionou porem agora gerou outro erro cara =/
Eu estou usando no meu codigo a classe System.LoadLibrary(jar1) e entao eu vi que para setar isso tenho que passar como parametro tbm o library path, estou passando assim:
O loadLibrary carrega uma biblioteca nativa do sistema para ser usada no Java (um .so ou um .dll dependendo do sistema). Você não precisa chamar esse método para um JAR (basta adicioná-lo ao class path mesmo).
PS: [OFF-TOPIC] você usa seu computador normalmente como root? Você está ciente que isso é perigoso, certo?
Você só precisará usar o System.loadLibrary e bibliotecas .so se estiver usando código nativo (por exemplo, escrito em C) na sua aplicação. Nesse caso você teria um método parecido com esse:
public native void doSomething();
Mas me parece que esse não é o seu caso. Você apenas tem um JAR que é dependência do seu projeto, certo? Se for isso, simplesmente remova o System.loadLibrary do seu código. Você só precisará do JAR no class path.
ai que ta cara, eu estou usando metodos nativos sim.
=/
por isso eu preciso usar o loadLibrary, no Windows eu consegui usar trtanquilo, colokei as dlls no system32 e boa, agora no linux estou com este problema .
As bibliotecas estão corretas? Com certeza? Se estiverem, deixe-as (os arquivos .so) em um diretório qualquer (por exemplo, /root/java). Supondo que o arquivo da biblioteca seja “/root/java/biblioteca.so”, no código faça:
System.loadLibrary("biblioteca");
E na hora de compilar, use o argumento “-Djava.library.path=/root/java”. Isso deve resolver.
[quote=Sad7]ai que ta cara, eu estou usando metodos nativos sim.
=/
por isso eu preciso usar o loadLibrary, no Windows eu consegui usar trtanquilo, colokei as dlls no system32 e boa, agora no linux estou com este problema .[/quote]
Dessa forma você “instala” a biblioteca no sistema e não precisar mexer no library path. Se quiser fazer isso no Linux, coloque o .so dentro da pasta /usr/lib.