Ajuda com javac

Ola galera,
é os seguinte, estou usando Ubuntu e não entendo nada de Linux, porem acho que nao é esse o problema :stuck_out_tongue: . 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:

javac -cp jar1.jar arquivo.java

alguem pode me ajudar?!

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… :smiley: 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?!

Você quer usar o javac ou o java? Cuidado com a digitação.

O javac requer nomes de arquivo como parâmetros (“arquivo.java”)
O java requer nomes de classe como parâmetros (“br.com.exemplo.Classe”)

eu agora que ja compilei quero usar java para rodar certo?!

da maneira simples, sem jars seria:
javac arquivo.java
java arquivo

correto?!
é isso que estou fazendo:

javac -cp jar1.jar:jar2.jar arquivo.java
java -cp jar1.jar:jar2.jar arquivo

o que esta errado!?

Não sei. Qual é o nome da classe definida em “arquivo.java”? Se o nome da classe for “Classe”, por exemplo, então você precisa usar

java … Classe

minha classe:

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[]) {
    ...
   }
}

O classpath deve incluir também o diretório corrente. Exemplo:

java -cp jar1.jar:jar2.jar[color=red]:.[/color] arquivo

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:

java -Djava.library.path=/root/java -cp jar1.jar:jar2.jar:. arquivo

no diretorio java é onde estao minhas jars necessarias, porem esta dando o seguinte erro:

/root/javaNative code library failed to load.java.lang.UnsatisfiedLinkError: no jar1 in java.library.path

sabe o que pode seR?
e muito obrigado pela ajuda que ta me dando cara, ta quebrando um galhão aqiui…
Abraçoos

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?

certo entao eu devo colocar os .so e nao os .jar no meu diretorio, correto?!

nao, traquilo, qualquer problema eu restouro aqui, estou usando o Linux numa VM somente para este teste, sem problemas, valeu =]

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 :frowning: .

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 :frowning: .[/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.

entao, jah esta lah, =//
nao sei oq esta acontecendo…to tentando de tudo jeito aki, mais ta fodinha viooo :frowning:

Você poderia passar em um arquivo compactado o código fonte do programa Java e a biblioteca (o source dela, de preferência)?