Муравей + JUnit: NoClassDefFoundError

Programmer life

26
задан dfa 23 July 2009 в 12:05
поделиться

10 ответов

Хорошо. Наконец-то я решил эту проблему. Я не скажу «решено», так как все еще не понимаю, что происходит. В любом случае ...

Я загрузил последние версии Ant (1.7.1) и JUnit (4.6) и разместил их во внешнем каталоге - НЕ в рабочем пространстве или «внутри» Eclipse.

Затем я пошел в Windows / Preferences / Ant / Runtime / Classpath / Ant Home Entries и уничтожьте все существующие (по умолчанию) значения. Я заменил их содержимым недавно загруженного каталога Ant lib.

Затем я добавил загруженный junit.jar в Global Entries. Он содержит классы org.hamcrest, как и junit.jar, включенный в Eclipse, поэтому я не знаю, зачем это нужно, но это так.

Вот и все. Моя задача junit в файле сборки работает отлично.

0
ответ дан 28 November 2019 в 07:20
поделиться

Я не думаю, что нужно добавлять jar-файл JUnit в путь к классам Ant. Вместо этого убедитесь, что у вас есть библиотека JUnit в вашем пути сборки Java (Windows / Preferences / Java / Build Path / Classpath Variables).

0
ответ дан 28 November 2019 в 07:20
поделиться

JUnit 4.5 включает Hamcrest как часть своей системы согласования. Убедитесь, что у вас есть этот файл JAR в пути к классам

0
ответ дан 28 November 2019 в 07:20
поделиться

добавьте также hamcrest.jar в свой путь к классам тестирования

10
ответ дан 28 November 2019 в 07:20
поделиться

Я не рекомендую это как хороший подход, но вы можете обойти эту проблему, зафиксировав текущий элемент в событии OnItemDataBound, сохранив его в общедоступном свойстве или поле, а затем используя его в ваша условная логика.

Например:

<asp:ListView ID="MusicList" OnItemDataBound="Item_DataBound" runat="server">
    <ItemTemplate>
        <tr>
            <%
                if (CurrentItem.DownloadLink != null)
                {
            %>
            <td>
                <a href="<%#Eval("DownloadLink") %>">Link</a>
            </td>
            <%
                } %>
        </tr>
    </ItemTemplate>
</asp:ListView>

А на стороне сервера добавьте следующий код в свой код за файлом:

public MusicItem CurrentItem { get; private set;}

protected void Item_DataBound(object sender, RepeaterItemEventArgs e)
{
   CurrentItem = (MusicItem) e.Item.DataItem;
}

Обратите внимание, что этот трюк не будет работать в элементе управления UpdatePanel .

Проверьте, есть ли в вашем пути к классам более старая версия jUnit. Попробуйте запустить ant-скрипт в командной оболочке, чтобы увидеть, появляется ли у вас такая же ошибка. Если вы это сделаете, то, вероятно, ant использует версию jUnit старше 4.4

Обновление:

Посмотрите на папку ANT_HOME. Щелкните правой кнопкой мыши файл build.xml, выберите вторую «сборку Ant» в диалоговом окне «Запуск от имени». Откроется диалоговое окно для редактирования конфигурации запуска муравья (может быть более простой способ открыть это). Перейдите на вкладку Classpath. Добавьте новейший junit в путь к классам (папка lib для ant).

в диалоговом окне "Запуск от имени ...". Откроется диалоговое окно для редактирования конфигурации запуска муравья (может быть более простой способ открыть это). Перейдите на вкладку Classpath. Добавьте новейший junit в путь к классам (папка lib для ant).

в диалоговом окне "Запуск от имени ...". Откроется диалоговое окно для редактирования конфигурации запуска муравья (может быть более простой способ открыть это). Перейдите на вкладку Classpath. Добавьте новейший junit в путь к классам (папка lib для ant).

1
ответ дан 28 November 2019 в 07:20
поделиться

У меня была та же проблема, и я пробовал много способов изменить путь к классам. Самым простым решением для меня было использование параметра fork = "no" в целевом объекте junit. Похоже, Eclipse может «автоматически» делать это лучше, чем я ...

2
ответ дан 28 November 2019 в 07:20
поделиться

Я загрузил JUnit 4.7 и поместил junit-4.7.jar в свой путь сборки (вместо более старой версии). Это решило ее. Я не трогал муравья.

14
ответ дан 28 November 2019 в 07:20
поделиться

Я поискал в каталоге установки Eclipse с верхнего уровня " hamcrest .jar" (подстановочный знак '*' вокруг hamcrest не отображается в этом веб-сообщении). Затем я добавил найденный jar-файл в путь к классам в Ant build.xml. Исправлена.

1
ответ дан 28 November 2019 в 07:20
поделиться

У меня возникла проблема при попытке запустить тесты junit из Run -> Run Как -> JUnit Test (я проверил, и у меня действительно установлен последний плагин junit (junit4_4.5.0)).

Я создал новый каталог (externalJars) в основном каталоге установки eclipse, загрузил туда самый последний jar-файл junit (4.8.1).

Затем из Eclipse, выбрав проект, я изменил файлы jar в пути сборки (Проект -> Свойства -> Путь сборки Java). Когда я впервые попробовал junit, я добавил jar-файл junit из папки plugin / org.junit4_4.5.0.v20090824. Я удалил этот файл jar и добавил externalJars / junit-4.8.1.jar (тот, который я только что загрузил) в путь сборки, нажав кнопку «Добавить внешние файлы Jar».

hamcrest.org - это библиотека "сопоставителей". Информацию можно найти по адресу:

http://code.google.com/p/hamcrest/

Предоставляет библиотеку объектов сопоставления (также известных как ограничения или предикаты), позволяющих декларативно определять правила сопоставления, для использования в других фреймворках. Типичные сценарии включают среды тестирования, фиктивные библиотеки и правила проверки пользовательского интерфейса.

Hamcrest был перенесен на Java, C ++, Objective-C, Python и PhP.

Примечание: Hamcrest - это не библиотека для тестирования: просто так получилось, что сопоставители очень полезны для тестирования.

1
ответ дан 28 November 2019 в 07:20
поделиться

Я обнаружил причину идентичной проблемы, но только при запуске теста с Ant в командной строке.

Возможно, вы захотите запустить Ant в режиме отладки ( ant -d ) и обратите внимание на этот оператор:

[junit] Implicitly adding /usr/share/ant/lib/junit4.jar:...

В моем случае этот JAR был добавлен в конец пути к классам при запуске проверить и переопределить мою ссылку JUnit в моем сценарии Ant.

Оказалось, что моя установка Ant была связана с набором старых библиотек JUnit. Мне пришлось удалить указанный выше junit4.jar, чтобы моя ссылка на путь к классам Ant вступила в силу.

7
ответ дан 28 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: