Ant classpath и junit.jar

У меня есть файл build.xml, который позволяет запускать тесты junit. Вот соответствующая часть:

<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>

Если я заменю строку:

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

с

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

Изменение разбивает путь к классам. Я получаю следующую ошибку:

<classpath> для <junit> должен включить junit.jar, если не в Ant собственный Путь к классам

Насколько я понимаю, атрибут location должен иметь одинаковое значение в обоих случаях. Так в чем же причина?

В качестве побочного вопроса этот файл сборки не будет работать в среде с другой версией junit (путь будет разорван). Можно ли добавить "общий" путь к junit.jar?

Ответы

Ответ 1

Библиотека JUnit находится там, где вы говорите, что она находится. Лично я бы полностью забыл о привязке к файлам jar, поставляемым с Eclipse, и вместо этого загружать банки непосредственно.

Если у меня есть проект, скажем, на пути /project, тогда я попытался бы установить зависимость где-то в этой иерархии, например, в /project/test/lib/junit.jar. Если мой файл сборки ant равен /project/build.xml, тогда он так же прост, как добавление ./test/lib/junit.jar в путь класса JUnit. Попытка ссылаться на произвольное местоположение на вашем компьютере является хрупкой (помните, что Eclipse можно было установить в любом месте), особенно при использовании относительных путей (поскольку содержимое вашего проекта могло также храниться в любом месте).

Ответ 2

Вы всегда можете символизировать свою банку в другом месте, если вы находитесь в Linux. Таким образом вы можете символически привязать его к пути, который не включает версию. Например:

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

Возможно, вы захотите иметь папку библиотек вне подкаталогов eclipse. Вы также можете использовать ivy или maven для управления вашими зависимостями.

Я не уверен, почему ваш пример выше, но сообщение об ошибке означает, что junit.jar не найден. Вы уверены, что установлен eclipse.home? Вы можете повторить его с помощью:

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