maven не может добавлять файлы в генерируемые исходники для фазы компиляции - PullRequest
15 голосов
/ 08 ноября 2010

Я использую Apache Thrift для генерации кода в target/generated-sources.

Компилятор Thrift создает каталог с именем gen-java, который содержит весь код Java. Когда я выполняю mvn compile, код генерируется правильно в target/generated-source/gen-java, но на этапе компиляции он жалуется, что не может найти классы, определенные в gen-java.

В моем понимании, Maven 2 автоматически добавляет сгенерированные источники, верно?

А что, если мой код тестирования также зависит от generated-sources, нужно ли указывать вручную компилятор?

Ответы [ 2 ]

17 голосов
/ 08 ноября 2010

В моем понимании, maven 2 автоматически добавляет сгенерированные источники, верно?

Ничего автоматического, плагины, генерирующие исходный код, обычно обрабатывают это, добавляя каталог вывода (что-то вроде target/generated-sources/<tool> по соглашению) в качестве исходного каталога для POM, чтобы он был включен позже на этапе компиляции.

Некоторые менее хорошо реализованные плагины не делают этого за вас, и вы должныдобавьте каталог самостоятельно, например, с помощью Build Helper Maven Plugin .

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

А что, если мой тестовый код также зависит от сгенерированных источников, нужно ли указывать вручную компилятор вручную?

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

0 голосов
/ 05 июня 2019

Сгенерированные источники не компилируются и не упаковываются автоматически. Однако некоторые IDE (например, IntelliJ) будут отображать их как исходные папки.

Чтобы сделать сгенерированные источники видимыми для maven, добавьте шаг add-source к узлу 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>
...