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>