Существует одно очень удобное решение - используйте Eclipse Java Compiler (EJC) вместо стандартного Oracle javac!Одним из преимуществ ECJ перед javac является то, что он допускает ошибки, он пытается компилировать как можно больше и сохраняет уже сгенерированные файлы class .EJC был разработан для использования в IDE, для высокоинтерактивной работы, где частичная компиляция является обязательной, но он также может использоваться как плагин CLI или Maven.Ребята из Plexus предоставляют EJC как удобную зависимость от Maven.
Компиляторы подключаются в Maven.У вас может быть несколько компиляций (выполнений компиляции), определенных в одном POM, и вы можете использовать разные компиляторы для каждого, предоставляя разработчику широкий диапазон параметров.
Пример кода POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<executions>
<execution>
<id>pre-compilation</id>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<compilerId>eclipse</compilerId>
<!-- IMPORTANT. Select EJC as compiler instead of javac -->
<failOnError>false</failOnError>
<!-- IMPORTANT. When ECJ is used errors are reported
only as warnings, it continues in compilation,
try to compile as much as possible, keeps already
generated classes in target/classes -->
</configuration>
</execution>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<!-- in the end recompile everything with standard javac.
This time no compilation errors are expected or tolerated. -->
<goals>
<goal>compile</goal>
</goals>
<configuration>
<useIncrementalCompilation>false</useIncrementalCompilation>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-eclipse</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
</plugin>
<!-- generate sources. This plugin executes in facet BETWEEN the compilations due to
'generate-sources' phase binding and relative position in POM -->
<plugin>
<groupId>org.eclipse.xtext</groupId>
<artifactId>xtext-maven-plugin</artifactId>
<version>2.5.0</version>
<executions>
<execution>
<id>generate-the-stuff</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
Кредиты дляГабриэль Аксель за свою статью http://www.gabiaxel.com/2011/10/replacing-javac-with-eclipse-compiler.html
Этот подход может решить некоторые хитрые круговые зависимости " источник до сгенерированный источник до источник ", потенциальнонеразрешимой путем разделения на отдельные модули.
Кроме того, я хотел интегрировать генерацию источников наиболее прозрачным способом.Необходимость перестановки кода, основанного на зависимостях от сгенерированных источников, окончательно сломает его.Я хочу сгруппировать мой код на основе логического проектирования, а не из-за технических сложностей.
Если ваш генератор кода работает с xtext, как в моем случае, и вы используете xtext-maven-plugin, скажем, недавно выпущенный 2.5.0Вам не нужно ничего настраивать, как в примере выше, плагин делает именно это под капотом.