Ошибка! Первый аргумент нестатической функции Java "replace" не является допустимой ссылкой на объект

Я пытаюсь получить ANT для создания отчета HTML теста JUNIT в Eclipse, но после создания сборки ANT я получаю следующие ошибки при запуске:

[junitreport] Processing C:\Documents and Settings\Administrator\workspace\Home\junit\TESTS-TestSuites.xml to C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\null785926900
[junitreport] Loading stylesheet jar:file:/C:/ANT/apache-ant-1.8.3/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl
[junitreport] : Error! The first argument to the non-static Java function 'replace' is not a valid object reference.
[junitreport] : Error! Cannot convert data-type 'void' to 'reference'.
[junitreport] : Fatal Error! Could not compile stylesheet
[junitreport] Failed to process C:\Documents and Settings\Administrator\workspace\Home\junit\TESTS-TestSuites.xml

Что мне нужно сделать, чтобы исправить это?

Вот разделы моего Build.xml, который я пытаюсь запустить:

<target name="Home">
    <mkdir dir="${junit.output.dir}"/>
    <junit fork="yes" printsummary="withOutAndErr">
        <formatter type="xml"/>
        <test name="Home" todir="${junit.output.dir}"/>
        <classpath refid="Home.classpath"/>
    </junit>
</target>
<target name="junitreport">
    <junitreport todir="${junit.output.dir}">
        <fileset dir="${junit.output.dir}">
            <include name="TEST-*.xml"/>
        </fileset>
        <report format="frames" todir="${junit.output.dir}"/>
    </junitreport>
</target>

Ответ 1

Когда я получил эту ошибку, мне пришлось щелкнуть правой кнопкой мыши по файлу build.xml в Eclipse, выбрать опцию "Запустить как Ant build..." (третий в меню), затем щелкнуть вкладку JRE и выбрать параметр "Запустить в том же JRE, что и рабочая область", а затем приступил к запуску script. По какой-то причине это устранило проблему. Я честно не знаю, почему.

Ответ 2

Eclipse Bug четко задокументирован Ошибка 384757. Анализ показывает, что Oracle представила ошибку. Мне нужна Java версия 7, но JunitReport нуждается в Java версии 5 и ранние версии Java версии 6. Очевидный способ добавить "" аргумент загрузочного пути к классам в Ant junitreport задачи в то время как проблема Java устанавливается Oracle в будущих версиях. К сожалению, Ant task junitreport не поддерживает параметр bootclasspath. Это что-то, что могут сделать люди, поддерживающие Ant?

Ответ 3

Я встретил эту ситуацию при запуске моей java-программы на Ubuntu 12.04 с * java 1.7.0_51 * на Eclipse SDK Juno. Я беру предложение Bhagyaraj, которое вместо этого использует apache- ant -1.9.2. (p.s. Стандартная версия ant версии Eclipse Juno - * org.apache.ant_1.8.3 *, и я использую apache- ant -1.9.3)

Вы можете выполнить мои шаги по настройке.

  • Загрузите apache- ant -1.9.3-bin.zip и извлеките в нужное место.
  • Откройте ваше затмение и выберите "Окно" → "Настройки"
  • Вы можете увидеть окно настроек. С левой стороны выберите ant → время выполнения
  • Теперь сосредоточьтесь на правом окне окна. Убедитесь, что вы сейчас находитесь на вкладке Classpath и выберите Ant Домашние записи (по умолчанию). Кнопки справа, которые находятся в Ant Главная..., теперь нажмите -able.
  • Без сомнения, нажмите кнопку Ant Главная... и выберите папку, где находится ваш ant -1.9.3. На этом шаге, если вы выберете неправильную папку, Eclipse может показать сообщение об ошибке, например, Указанный ant home не содержит каталог "lib" . Если вы выберете правильный каталог, Ant Домашние записи (по умолчанию) станет ** Ant Домашние записи()
  • Не забудьте нажать кнопку Apply.

После изменения, когда вы щелкните правой кнопкой мыши файл build.xml и выберите "Выполнить" → 1 ant Сборка, сообщение об ошибке не будет отображаться, потому что ваш ant теперь 1.9.3.

Я также загружаю apache- ant -1.8.4 для запуска моего файла сборки, но ошибка не может быть решена.

Ответ 4

Я использовал jdk1.6.45 и последний apache- ant -1.9.2-bin\

Проблема решена.

В соответствии с примечанием к MikeBach

Это ошибка #, пожалуйста прочти: https://bugs.eclipse.org/bugs/show_bug.cgi?id=384757 Исправлено в Ant.

С уважением, Bhagyaraj

Ответ 5

Если вы используете отчет Eclipse/JUnit с JDK 1.7, используйте JDK 1.6. В JDK 1.7 есть ошибка с сообщением Eclipse/JUnit, аналогичным тому, что вы описываете. Это может быть аналогичный отчет: https://netbeans.org/bugzilla/show_bug.cgi?id=201022

Ответ 6

Я попытался использовать несколько разных настроек JRE/JDK (все версии 1.6 и 1.7) с различными проблемами (это или отсутствие доступа к XSL файлу в банке) для каждого.

Это не идеальное решение, но я, похоже, не сталкиваюсь с этими проблемами, если отчет JUnit является "сырым" в файле сборки - не завернут в цель.

Плохое обходное решение, очевидно, в этих целях является важным аспектом Ant, но иногда для отчетов целей/зависимостей сборки не так важны критические задачи. Это не так много для меня, потому что я использую эти отчеты в виде одноразовой моды, а не как часть сборки.

Ответ 7

Ошибка была введена в Java 7u5 в соответствии с этим комментарием. Другой комментарий объясняет, как обходить его, изменяя bootclasspath. ( ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не пытался проверить это.)

Это решение, однако, сработало для меня:

  • Загрузите ant -1.9.4
  • Затмение → Настройки → Ant → Время воспроизведения → AntHomeEntries
  • Удалить все записи пути 1.8.x
  • Добавить все libs из 1.9.4 вместо

Согласно Ant Изменения, это было исправлено с 1.9.1