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!