Подтвердить что ты не робот

Как увидеть выход компилятора при запуске javac через задачу Ant?

Есть ли четко объясненный и простой способ увидеть выход компилятора при запуске javac с помощью Ant задачи?

Вот мой тег javac Ant:

<javac srcdir="${myproject.src}" destdir="${myproject.class}">
    <!-- ... -->
</javac>

Вот единственное сообщение об ошибке, которое я получаю:

/path/to/build.xml:42: Compile failed; see the compiler error output for details.

Проблема в том, что я не знаю, как увидеть вывод ошибки компилятора для деталей...


Несколько элементов конфигурации, которые могут помочь:

  • Ant 1.6.5
  • Windows 7 x64
  • Java 1.6.0_20 x32
  • Запуск целей через Eclipse

Я знаю, что есть некоторые связанные ответы на вопросы о SO, но никто из них не отвечает на эти простые вопросы:

4b9b3361

Ответ 1

Я думаю, что вы ищете атрибут verbose="true".

запрашивает компилятор для подробного вывода; по умолчанию - нет.

Вы уже упоминали в комментариях, что это не печатает причину вашей ошибки. Ну, я думаю, что в вашей ситуации происходит что-то еще. У меня есть пример проекта, и в любом случае причина моей ошибки была напечатана. Здесь вывод с verbose="false":

[mkdir] Created dir: C:\Projects\MavenSandbox\target\classes
[javac] C:\Projects\MavenSandbox\mavensandbox.xml:284: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 3 source files to C:\Projects\MavenSandbox\target\classes
[javac] C:\Projects\MavenSandbox\src\main\java\com\sandbox\Sandbox.java:8: error: cannot find symbol
[javac]         System.out.prinln("Hello, I\'m the best!");
[javac]                   ^
[javac]   symbol:   method prinln(String)
[javac]   location: variable out of type PrintStream
[javac] 1 error

Что-то странное и специфичное для вашего кода вызывает плохое сообщение об ошибке. Можете ли вы создать образец проекта, который воспроизводит ошибку?


Как вы уже упоминали, debug="true" не является атрибутом, который вы ищете.

Указывает, должен ли источник компилироваться с информацией об отладке; по умолчанию отключено. Если установлено значение off, -g: none будет передано в командной строке для компиляторов, которые его поддерживают (для других компиляторов не будет использоваться аргумент командной строки). Если установлено значение true, значение атрибута debuglevel определяет аргумент командной строки.

Вы знаете, когда вы получаете трассировку стека, и в ней есть номера строк? То, что делает debug="true". Если это не так, вы не получите номера строк.

Ответ 2

Проблема также возникает, когда сам java-компилятор не может запускаться. Например, когда определенная куча слишком велика. Задача java2 Intellij будет отображать информацию

Using external javac compiler
Compilation arguments:
...
'-J-Xmx1600m'
...
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

и причина в файле build.xml, в моем случае:

<property name="compiler.args" value="-J-Xmx1600m"/>

Ответ 3

Вам следует добавить атрибут debug

<javac srcdir="${myproject.src}" destdir="${myproject.class}" debug="true>
    <!-- ... -->
</javac>

Ответ 4

Используйте этот

<javac srcdir="src" destdir="build/classes" debug="true">
            <classpath>
                <path refid="classpath"/>
            </classpath>
</javac>

Ответ 5

Я получал то же сообщение об ошибке без дополнительной информации. Проблема закончилась тем, что один из моих файлов .jar был поврежден. Замена этого файла .jar решила проблему.