Проект Maven з кількома вихідними каталогами

1. Вступ

Іноді нам потрібно використовувати декілька вихідних каталогів у проекті Java. Поширений приклад, коли є класи, які генеруються автоматично і поміщаються в інший каталог.

У цій короткій статті ми покажемо, як налаштувати Maven на роботу з додатковими каталогами джерел .

2. Додавання ще одного вихідного каталогу

Якщо припустити, що у нас вже створений проект Maven, давайте додамо новий вихідний каталог, який називається another-src, у основну папку src / .

Після цього давайте створимо простий клас Java всередині цієї папки:

public class Foo { public static String foo() { return "foo"; } }

Давайте тепер створимо ще один клас у нашому каталозі src / main / java, який використовує щойно створений клас Foo :

public class MultipleSrcFolders { public static void callFoo() { Foo.foo(); } }

Наша структура проекту тепер виглядає так:

Якщо ми спробуємо скомпілювати цей проект за допомогою Maven, ми отримаємо помилку компіляції, оскільки клас Foo не включений у проект:

[ERROR] .../MultipleSrcFolders.java:[6,9] cannot find symbol [ERROR] symbol: variable Foo [ERROR] location: class com.baeldung.maven.plugins.MultipleSrcFolders

3. Використання плагіна Builder Helper

За допомогою Maven ми можемо використовувати плагін Builder Helper, щоб додати більше вихідних каталогів. Цей плагін дозволяє нам налаштувати життєвий цикл збірки різними способами.

Однією з його цілей є додаткові джерела , які призначені для додавання більше каталогів src до проекту на етапі генерації джерел .

Ми можемо використовувати його в нашому проекті, додавши до нашого pom.xml :

 org.codehaus.mojo build-helper-maven-plugin 3.0.0   generate-sources  add-source    src/main/another-src     

Останню версію плагіна можна знайти в Maven Central.

Якщо ми зараз компілюємо наш проект, збірка вдається.

4. Висновок

У цій статті ми бачили, як налаштувати плагін Builder Helper Maven для роботи з декількома каталогами src у проекті Maven.

Як завжди, повний вихідний код прикладів доступний на GitHub.