Compilação, compactação e execução

14 respostas
Fox_McCloud

Hum… tenho tido alguns probleminhas com o meu aplicativo java! :frowning:

1º - Quando eu compilo os .java com o Eclipse, se eu tento rodar a classe principal no prompt com o comando java algumas das classes que foram compiladas não são encontradas, como se não tivessem sido compiladas e não existissem.

2º - Quando eu crio um arquivo .jar, com manifest, usando o curinga *.class, sempre tem uma classe que fica de fora.

3º - Mesmo que eu atualize o .jar colocando a classe que faltou, quando eu mando executar o .jar dá um monte de erro. Detalhe: no meu manifest existe um “Main-Class”.

Dicas? :smiley:

14 Respostas

danieldestro

Melhor você checar o nível de diretórios, classpath e se está usando a ferramenta de jar corretamente.

Fox_McCloud

Eu usei o seguinte comando:

jar -cvfmi teste.jar MANIFEST.MF *.class

E é com esse comando que sempre fica de fora um dos arquivos .class. E mesmo usando um -u depois e colocando o arquivo dá uns erros na hora de executar. :?

Quanto ao classpath, é só um programinha simples que tem todas as classes no mesmo diretório. :wink:

danieldestro

Muito estranho ele incluir alguns .class e outros não. Verifique se todos os seus .class estão no diretório corrente.

Fox_McCloud

Estão sim, com certeza! E eu já conferi também o Main-Class do MANIFEST.MF, também está correto. Será que isso tem alguma ligação com o fato do java não rodar o que eu compilei no Eclipse :?: Só roda se eu mandar rodar no Eclipse!

danieldestro

Ele dá alguma mensagem de erro na execução fora do Eclipse?

Fox_McCloud

Sim, diz que não reconhece uma das palavras, que por acaso é uma das classes.

danieldestro

QUAL A MENSAGEM (stack trace)???

Fox_McCloud

Primeiro eu tenho um erro em tempo de compilação:

<blockquote>C:\workspace\REGEXP>javac Teste.java

Teste.java:5: cannot resolve symbol

symbol  : class Valida

location: class Teste

private Valida validacao;

^

Teste.java:10: cannot resolve symbol

symbol  : variable Expressoes

location: class Teste

padrao=Expressoes.URL;

^

Teste.java:13: cannot resolve symbol

symbol  : class Valida

location: class Teste

validacao=new Valida(texto,padrao);

^

3 errors

C:\workspace\REGEXP>

Note que na verdade o ^ aponta para o V de Valida.

Na verdade o Valida.java foi compilado e o Valida.class existe e está na mesma pasta.

Quando eu crio o jar ele não adiciona o primeiro .class (que aparece em um dir por ordem alfabética), no caso o Expressoes.class. São quatro arquivos:

Valida.class

Expressoes.class

Teste.class (que é o main no manifest)

Manifest.mf (esse indicado por parâmetro m no comando jar)

E depois mesmo quando eu consigo inserir a classe que falta dá um erro na hora de executar o jar, como se o programa não tivesse encontrado o Valida.class, exatamente como acima, onde não havia jar.

danieldestro

O valida tem algum package definido?

Se não, experimenta isso:

javac -classpath . Teste.java

E outra, os dois últimos erros apontam que você não declarou as variáveis padrao e validacao.

Fox_McCloud

danieldestro:
Se não, experimenta isso:

javac -classpath . Teste.java

Agora funcionou! :smiley:

E para executar eu também tive que usar java -classpath . Teste

Eu refiz o arquivo .jar da seguinte forma:

jar -cvfmi teste.jar MANIFEST.MF .

Então eu renomeei o .jar como .zip, abri com o Winzip, removi os arquivos desnecessários (.java, .txt, etc…), renomeei de volta para .jar e agora funciona. Não entendi nada, mas está funcionando.

Dicas?

obs: grato pela ajuda até agora!

danieldestro

Como queria executar algo que nem compilar compilava?

Fox_McCloud

Eu estava tentando usar os arquivos .class que o Eclipse havia gerado. Porque o local atual não é o classpath padrão do meu java?

danieldestro

Provavelmente porque o classpath não está definido.

Fox_McCloud

Muito obrigado, então!

Criado 13 de julho de 2005
Ultima resposta 13 de jul. de 2005
Respostas 14
Participantes 2