2010-04-23 4 views
0

Mon script ant de construction commence par une tâche java qui utilise fork = trueIncohérence NoClassDefFoundError dans la tâche subant java

<java fork="true" 
    classname="org.apache.tools.ant.launch.Launcher" 
    jvm="${java.home}/bin/java" 
    classpathref="class.path"> 
    <arg value="-f" /> 
    <arg value="${ant.file}" /> 
    <arg value="generate" /> 
</java> 

Les <arg value="generate" /> des points à une autre tâche dans le même fichier de construction Ant. Cette tâche démarre une autre cible avec une tâche subant qui pointe vers un autre fichier.

<subant verbose="true" target="replace"> 
    <fileset dir="${basedir}" includes="refactor.xml" /> 
</subant> 

Ce fichier refactor.xml recommence une tâche Java avec fork = true.

<java classpathref="class.path" 
    classname="namespace.Tool" 
    fork="true"/> 

Le comportement étrange est: tout fonctionne bien, sauf de temps en temps, je reçois l'erreur NoClassDefFoundError pour le fichier source namespace.Tool java. Après, par exemple, fermeture, rouvrir le fichier l'erreur peut disparaître, mais il n'y a pas de comportement reproductible.

J'ai essayé d'éviter la construction subantile (utilisée pour dégager) mais cela n'aide pas.

Enfin, le class.path référencé est comme ceci:

<path id="class.path"> 
    <pathelement location="../common/bin" /> 
    <pathelement location="./bin" /> 
    <fileset dir="${build.dir}"> 
    <include name="...jar" /> 
    </fileset> 
</path> 

Toutes les idées?

Répondre

0

Cause était <pathelement location="./bin" />.

Ce dossier bin a été recompilé par Eclipse dès que les autres étapes de la séquence des tâches Ant, par ex. un dossier a été supprimé. Le paramètre par défaut dans Eclipse est de recompiler tout le code à un moment donné. Par conséquent, le processus Ant peut ou non trouver une classe spécifique dans ce dossier bin, ce qui entraîne l'incohérence NoClassDefFoundError.