Maven не может добавлять файлы в сгенерированные источники для этапа компиляции
Я использую Apache Thrift для генерации кода в target/generated-sources
.
Компилятор Thrift создает каталог с именем gen-java
, который содержит весь код Java. Когда я выполняю mvn compile
, код генерируется правильно в target/generated-source/gen-java
, но на этапе компиляции он жалуется, что не может найти классы, которые определены в gen-java
.
В моем понимании, Maven 2 автоматически добавляет сгенерированные источники, верно?
А что, если мой тестовый код также зависит от generated-sources
, нужно ли вручную указывать, в компилятор входит?
Ответы
Ответ 1
В моем понимании, maven 2 автоматически добавляет сгенерированные источники, верно?
Ничего автоматического, плагины, генерирующие исходный код, обычно обрабатывают это, добавляя свой выходной каталог (что-то вроде target/generated-sources/<tool>
по соглашению) в качестве исходного каталога в POM, чтобы он был включен позже на этапе компиляции.
Некоторые плохо реализованные плагины не делают этого за вас, и вы должны добавить каталог самостоятельно, например, с помощью плагина Build Helper Maven.
И поскольку вы не предоставили ни одного фрагмента POM, ни одной ссылки, я не могу больше ничего сказать.
А что, если мой тестовый код также зависит от сгенерированных источников, нужно ли вручную указывать компилятор?
Как я уже сказал, сгенерированные источники обычно добавляются в виде исходного каталога и компилируются и, таким образом, доступны в тестовом пути к классам без необходимости что-либо делать.
Ответ 2
Созданные источники не компилируются и не упаковываются автоматически. Некоторые IDE (например, IntelliJ) будут отображать их как исходные папки.
Чтобы сделать сгенерированные источники видимыми для maven, добавьте add-source
-step в узел build/plugins
вашего pom.xml
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/gen-java</source><!-- adjust folder name to your needs -->
</sources>
</configuration>
</execution>
</executions>
</plugin>