2011-01-22 1 views
16

Ho un build.xml che mi consente di eseguire i test di junit. Qui è la parte rilevante:Ant classpath e junit.jar

<path id="JUnit 4.libraryclasspath"> 
    <pathelement location="../../../../../eclipse/plugins/org.junit4_4.5.0.v20090824/junit.jar"/> 
    <pathelement location="../../../../../eclipse/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar"/> 
</path> 
<path id="MyProject.classpath"> 
    <pathelement location="bin"/> 
    <path refid="JUnit 4.libraryclasspath"/> 
</path> 

<target name="run_unit_tests" depends="build"> 
     <mkdir dir="${junit.output.dir}"/> 
     <junit printsummary="yes" haltonfailure="no"> 
      <classpath refid="MyProject.classpath" /> 

      <formatter type="xml"/> 
      <batchtest todir="${junit.output.dir}"> 
        <fileset dir="${src}"> 
          <include name="**/*Test*.java"/> 
        </fileset> 
      </batchtest> 
     </junit> 
</target> 

Se sostituisco la linea:

<pathelement location="../../../../../eclipse/plugins/org.junit4_4.5.0.v20090824/junit.jar"/> 

con

<pathelement location="${eclipse.home}/plugins/org.junit4_4.5.0.v20090824/junit.jar"/> 

Il cambiamento rompe il percorso di classe. Viene visualizzato il seguente errore:

The <classpath> for <junit> must include junit.jar if not in Ant's own classpath

Per quanto ho capito, l'attributo posizione deve contenere lo stesso valore in entrambi i casi. Quindi quale può essere la ragione?

Come una domanda a parte, questo file di build non funzionerà su un ambiente con diversa versione junit (il percorso si interromperà). È possibile aggiungere un percorso "generale" a junit.jar?

+0

eclipse.home è stato espanso correttamente? –

risposta

24

La libreria JUnit risiede ovunque tu dici di risiedere. Personalmente, mi dimenticherei completamente del collegamento ai file jar forniti con Eclipse e invece allo download the jars directly.

Se si dispone di un progetto, dire al percorso /project, quindi proverei a mettere la dipendenza da qualche parte in quella gerarchia, come a /project/test/lib/junit.jar. Se il mio file di build ant è quindi /project/build.xml, è semplice come aggiungere ./test/lib/junit.jar al classpath JUnit. Cercando di fare riferimento a una posizione arbitraria sulla tua macchina è fragile (ricorda, potrebbe essere installato ovunque), in particolare quando si utilizzano percorsi relativi (poiché il contenuto del progetto potrebbe anche essere memorizzato ovunque).

4

È sempre possibile associare il collegamento simbolico del barattolo a un'altra posizione, se si è su Linux. In questo modo è possibile associarlo a un percorso che non include la versione. Ad esempio:

ln -s plugins/org.junit4_4.5.0.v20090824/junit.jar /wherever/junit.jar 

Si consiglia di avere una cartella di librerie al di fuori delle sottodirectory di eclipse. Potresti anche considerare di utilizzare ivy o Maven per gestire le tue dipendenze.

Non sono sicuro del motivo dell'esempio precedente, ma il messaggio di errore indica che junit.jar non è stato trovato. Sei sicuro che eclipse.home è impostato? Puoi farlo echeggiare con:

<echo message="${eclipse.home}"> 
+0

+1 per $ {eclipse.home}. Ora posso scrivere script build.xml che si collegano relativamente ai plugin di Eclipse invece dell'hack di hardcodificare o copiare le librerie nel progetto. – jmort253