Ant compila, mas na hora de executar o class não roda

1 resposta
G

Pessoal,
Estou fazendo um trabalho usando o Commons Configuation da Jakarta e preciso de 3 jars dentro da minha pasta lib. Para não ter que adicionar esses jars no CLASSPATH, eu criei um build.xml para refernciá-los na hora de compilar.

Aqui está o conteúdo do build.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="teste" default="compile" basedir=".">

        <property name="web-inf" value="\${basedir}/WEB-INF" />
        <property name="src" value="\${web-inf}/src" />
        <property name="classes" value="\${web-inf}/classes" />
        <property name="lib" value="\${web-inf}/lib" />

        <path id="classpath">
                <pathelement location="${lib}/commons-configuration-1.5.jar"/>
                <pathelement location="${lib}/commons-collections-3.2.jar"/>
                <pathelement location="${lib}/commons-lang-2.4.jar"/>
        </path>

        <target name="compile">
                <javac srcdir="\${src}" destdir="\${classes}">
                        <classpath refid="classpath"/>
                </javac>
        </target>
</project>

E aqui o código java de exemplo:

import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;

public class Commons {

        public static void main( String args[] ) throws Exception {

                XMLConfiguration conf = new XMLConfiguration( "../config/conf.xml" );
                conf.setExpressionEngine( new XPathExpressionEngine() );
                conf.setReloadingStrategy( new FileChangedReloadingStrategy() );

                System.out.println( conf.getString( "prop[@id='AW00']/num[@id='399']/res" ) );

        }
}

Na hora de rodar o ant ele compila corretamente, ou seja, ele consegue achar os .jars. Só que depois de compilado, se eu tento executar o .class ele diz que não encontra o pacote “org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;”

Veja:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/configuration/tree/ExpressionEngine
Caused by: java.lang.ClassNotFoundException: org.apache.commons.configuration.tree.ExpressionEngine
        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:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

Pois bem, agora vem a pergunta: como pode ele não reclamar do pacote não encontrado na hora de compilar e reclamar na hora de executar o arquivo compilado sendo que este erro não parece ser um erro em tempo de execução pois de fato o pacote existe e o arquivo conseguiu ser compilado.

Alguém poderia me ajudar?
Obrigado!

1 Resposta

F

Tu esta definindo o classpath na hora da execução?

Criado 29 de março de 2008
Ultima resposta 31 de mar. de 2008
Respostas 1
Participantes 2