Olá:
Suponham a seguinte classe:
import java.util.Date;
import javax.swing.JOptionPane;
import org.apache.commons.lang.ObjectUtils;
public class Teste {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Agora São\n"
+ ObjectUtils.toString(new Date()));
System.exit(0);
}
}
O pacote org.apache.commons.lang.ObjectUtils vem do Commons Lang. O fonte fica no diretório src e o jar do Commons Lang no diretório lib. O buildfile fica no diretório raiz e é o seguinte:
<?xml version="1.0" encoding="UTF-8"?>
<project name="testant" default="build" basedir=".">
<property name="src.dir" location="src"/>
<property name="bin.dir" location="bin"/>
<property name="lib.dir" location="lib"/>
<property name="jar.dir" location="."/>
<property name="jar.name" value="teste.jar"/>
<property name="jar.file" location="${jar.dir}/${jar.name}"/>
<path id="classpath">
<fileset dir="${lib.dir}" >
<include name="**/*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${bin.dir}"/>
</target>
<target name="clean">
<delete dir="${bin.dir}"/>
<delete file="${jar.file}"/>
</target>
<target name="build" depends="init">
<javac destdir="${bin.dir}">
<src path="${src.dir}"/>
<classpath refid="classpath"/>
</javac>
</target>
<target name="jar" depends="build" description="--> cria Jar">
<jar destfile="${jar.file}" basedir="${bin.dir}" update="true">
<manifest>
<attribute name="Main-Class" value="Teste"/>
</manifest>
</jar>
</target>
<target name="runjava" depends="build">
<java fork="true" dir="${bin.dir}" classname="Teste" >
<classpath refid="classpath"/>
</java>
</target>
<target name="runjar" depends="jar">
<java fork="yes" jar="${jar.file}">
<classpath refid="classpath"/>
</java>
</target>
</project>
Quando rodo o targets build e jar, tudo ocorre corretamente. O problema é ao executar o programa. O usar a task runjava aparece a seguinte mensagem:
Ao rodar runjar aparece isso:
O curiooso é que se eu reescrever a classe de forma a tirar referência ao ObjectUtils:
import java.util.Date;
import javax.swing.JOptionPane;
public class Teste {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Agora São\n"
+ new Date());
System.exit(0);
}
}
e rodar runjar, o programa é executado coretamente, mas o runjava continua apresentando o mesmo erro de antes.
Creio que devo estar cometendo algum erro elementar, mas não consigo descobrir o quê. Se fosse erro na configuração do classpath não teria sequer compilado.