Игнорирование ошибок компиляции - Java - PullRequest
8 голосов
/ 29 сентября 2011

У меня есть около 1500 файлов для компиляции, в которых 15-20 файлов имеют ошибки компиляции.Эти файлы не находятся под моим контролем, поэтому я не мог делать какие-либо изменения / обновления / удаления.Итак, у меня есть два вопроса:

1) как я игнорирую ошибки компиляции из этих 15-20 файлов и продолжаю создавать файл .class для остальных из них.есть ли какая-либо опция командной строки javac или что-либо, что будет игнорировать ошибки компиляции и создавать файлы .class для всех других файлов без ошибок.

2) компилятор java прервет компиляцию, как только он обнаружит эти ошибки или будетон продолжает компилирование (создание файлов .class) всего остального и в конце жалуется на эти файлы с ошибками.

Ответы [ 7 ]

14 голосов
/ 29 сентября 2011

Вы можете использовать Eclipse . Его внутренний компилятор - по крайней мере, в некоторых случаях - способен продолжать работу с остальной частью сборки, даже если некоторые классы не компилируются полностью. Он даже создаст файлы классов для поврежденных классов , если это возможно, генерируя методы, которые выдают исключение, как только они вызываются.

Я бы настоятельно рекомендовал бы просто взять копию всего исходного кода и исправить ошибки, по крайней мере, в своей собственной копии как можно раньше, но частичная компиляция Eclipse может помочь вы.

3 голосов
/ 29 сентября 2011

Вы не можете игнорировать ошибки компиляции. Они всегда будут терпеть неудачу при сборке.

Ваш единственный выбор - поговорить с тем, кто контролирует файлы, чтобы исправить их, или найти способ заменить их другим способом.

Если вы попытаетесь удалить их из сборки, вам также придется удалить все файлы, которые используют эти файлы. Например

class A {
    B b;
}

Если B имеет ошибку компиляции, ваш скрипт сборки может пропустить B.java, но когда вы нажмете A.java, он все равно попытается скомпилировать B, поэтому A нужно удалить. Это может оказаться нетривиальной задачей.

2 голосов
/ 23 сентября 2012

Вы можете написать себе скрипт, который обходит ваше дерево исходников и вызывает javac для каждого файла java в отдельности. Таким образом, вы получите все правильно скомпилированные файлы, которые не зависят от файлов с ошибками. Это будет ужасно медленная операция. Я ожидаю, что это займет в 100 раз больше времени, чем один звонок в javac (учитывая, что в итоге вы получите около 1500 звонков).

1 голос
/ 15 марта 2016

Создание макетов оскорбительных файлов.По сути, та же идея, что и у файла заголовка C, включает сигнатуры функций и приемлемые возвращаемые значения по умолчанию (null, false, 0).Это позволит javac скомпилировать все, просто убедитесь, что фиктивные классы не будут включены в окончательный дистрибутив, или у вас будут странные ошибки, когда они окажутся первыми в пути к классам.Это работает для реализации неработающих интерфейсов и наследования от неработающих классов.

1 голос
/ 29 сентября 2011

Вы можете исключить некоторые исходные файлы из компиляции, используя тег exclude в задаче ant.

  <target name="compile" description="Compile Java source files">
    <javac destdir="classes" classpathref="classpath">
      <src path="src"/>
      <exclude name="**/excluded_folder/**"/>
    </javac>
  </target>

РЕДАКТИРОВАТЬ: Но, конечно, любые java-файлы, которые зависят от исключенных классов, также не будут компилироваться, если толькоу вас уже есть предварительно скомпилированная версия исключенных файлов в пути к классам.

0 голосов
/ 29 сентября 2011
  1. Скажите тому, кто нарушил код (конечно, дипломатично), чтобы исправить это как можно скорее. Другие предложили (см. Там 2-й комментарий), чтобы сделать эти случаи общедоступными (в рамках команды / компании), что значительно уменьшает количество таких ошибок компиляции
  2. Комментируйте все, что препятствует кодукомпиляция (предполагается, что эти части вам не нужны)

Вы должны иметь дело не с некомпилируемым кодом, а с тем, кто его зафиксировал.Если над этим проектом работает больше людей, каждый должен иметь дело с той же проблемой на своем локальном компьютере (выяснить, почему он не скомпилирован, отследить ошибочные классы, исключить / прокомментировать эти классы, есливаш код не зависит от них, не перестраивает и т. д.) Гораздо эффективнее иметь только одного человека для решения проблемы, а все остальные просто обновляют свой локальный репозиторий.

0 голосов
/ 29 сентября 2011

Что вы имеете в виду

, который будет игнорировать ошибки компиляции и создавать файлы .class для всех других файлов без ошибок

Понимаете ли вы, что если эти файлысвязаны (как в одном проекте), то зависимые исходные файлы тоже не будут компилироваться ..?Нет никакого способа обойти это, кроме как исправить ошибки компиляции и повторить попытку!

...