NoClassDefFoundError

8 respostas
B

Olá pessoal, eu estou com problemas em fazer o meu arquivo jar reconhecer bibliotecas internas à elas, são outros jar´s. Quando executo pelo eclipse (não pelo jar), o programa reconhece os caminhos, pois os jar´s fazem parte do projeto. Mas, quando gero o jar pelo Ant e o executo, me deparo com este problema.

Alguém sabe como proceder?

8 Respostas

Rafael_Steil

Como esta o seu CLASSPATH? Note que cada .jar precisa estar referenciado individulamente.

Rafael

B

bom, eu defino o classpath num arquivo xml, usando o Ant. Abaixo o pedaço que uso:

<path id="compile.classpath"> <pathelement path ="${files.dir}/JFreeChart/jfreechart-1.0.0-pre2.jar"/> <pathelement path ="${files.dir}/JFreeChart/jcommon-1.0.0-pre2.jar"/> <pathelement path ="${files.dir}/EPSDump/dump.jar"/> <pathelement path ="${classes.dir}"/> <pathelement path ="${classpath}"/> </path>

files.dir corresponde a files/lib. Alguma sugestão?

editado

Para complementar, aqui está o meu target que usa o classpath:

<target name="Compilar" depends="init"> <javac srcdir="${src.dir}" destdir="${classes.dir}" verbose="off" debug="on"> <classpath refid="compile.classpath"/> </javac> </target>

o erro que aparece da 1ª linha é o seguinte:

Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: org/jfree/chart/ChartPanel

Rafael_Steil

Ok, mas o problema eh para rodar, nao?! Voe esta gerando um JAR com outros jars dentro, ou esta executando o class diretamente? Caso esteja executando diretamente, voce precisa adicionar os jars no classpath:

java -cp .;c:/blah/files/lib/Jar1.jar;c:/blah/files/lib/Jar2.jar nome.pacote.NomePrograma

Rafael

B

Eu estou gerando um jar com outros jar´s dentro. Não estou sabendo configurar pra achar os outros jar´s dentro deste projeto.jar. Se souber como fazer, ou tiver alguma outra maneira, vai me ajudar bastante… Tô há dias tentando solucionar isso… :?

Rafael_Steil

Referencie os jars com Class-Path no seu manifest.mf

http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download

Rafael

B

Tranquilo, dei uma olhada no site que você recomendou. Me esclareceu algumas coisas, mas ainda não resolvi.

Vou colocar como ficou o meu targer que faz a referência ao manifest:

<jar basedir="bin" jarfile="${exec.dir}/${jarfile}" excludes="{classes.dir}/files">
		<manifest>
			<attribute name="Main-Class"
			           value="br.unirio.set.TelaInicial"/>
			<attribute name="Class-Path" value="files/lib/JFreeChart/jfreechart-1.0.0-pre2.jar files/lib/JFreeChart/jcommon-1.0.0-pre2.jar files/lib/EPSDump/dump.jar"/>
		</manifest>
		
    </jar>

Alguma sugestão?

B

Bom, o tipo de erro mudou, agora ele não acha as classes internas ao jar, mas acha os .jar.

erro: java.lang.NoClassDefFoundError: org/jfree/data/xy/XYDataset

Esta classe é a primeira usada no meu programa.

Please help! :wink:

thiago.serra

Estou tendo exatamente o mesmo problema, com a mesma biblioteca (JFreeChart), e depois de mudar o MANIFEST.INF, acontece a mesma coisa. Como resolveram isso?

Criado 16 de maio de 2005
Ultima resposta 18 de ago. de 2008
Respostas 8
Participantes 3