Перейти к основному содержимому

Дополнительные исходные каталоги в Maven

· 3 мин. чтения

1. Обзор

В этом руководстве мы объясним, как добавить несколько исходных каталогов в проект Java на основе Maven.

2. Дополнительный исходный каталог

Предположим, нам нужно добавить исходный каталог /newsrc внутрь src/main :

./c0dc2cc56878ac3317b67c03d251cfc9.png

Во-первых, давайте создадим простой файл класса Java DataConnection.java внутри папки src/main/newsrc/ :

public class DataConnection {

public static String temp() {
return "secondary source directory";
}
}

После этого давайте создадим еще один файл класса в каталоге src/main/java , который использует наш класс DataConnection , созданный в другой папке:

public class MainApp {
public static void main(String args[]){
System.out.println(DataConnection.temp());
}
}

Прежде чем мы попытаемся скомпилировать наш проект Maven, давайте кратко рассмотрим структуру проекта:

./532a3ad8fa22cdbfa915de9425996eaf.png

Теперь, если мы попытаемся скомпилировать его, мы получим ошибку компиляции :

[ERROR] BuilderHelper/src/main/java/com/foreach/maven/plugin/MainApp.java:[3,29] package com.foreach.database does not exist
[ERROR] BuilderHelper/src/main/java/com/foreach/database/MainApp.java:[9,28] cannot find symbol
[ERROR] symbol: variable DataConnection
[ERROR] location: class com.foreach.MainApp

Мы можем понять основную причину сообщения об ошибке — мы определили класс DataConnection вне общей конфигурации каталога проекта.

По умолчанию Maven поддерживает только одну исходную папку . Чтобы настроить более одного исходного каталога, нам понадобится плагин Maven с именем build-helper-maven-plugin .

3. Добавьте исходный каталог с помощью build-helper-maven-plugin .

Мы будем использовать build-helper-maven-plugin для добавления исходного каталога, чтобы устранить указанную выше ошибку. Этот плагин помогает нам достичь нашей цели с минимальным количеством настроек.

Так как у нас есть родственный каталог рядом с папкой src/main , теперь мы добавим второй исходный каталог :

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/main/newsrc/</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

Здесь мы запускаем цель добавления источника на этапе генерации источников . Также мы указали исходный каталог в теге configuration.sources.source .

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

Теперь мы скомпилируем проект, после чего сборка завершится успешно. После этого, когда мы проверим целевую папку, мы увидим, что плагин генерирует классы из обоих исходных каталогов :

./0dfd95253fc9688d3311ca116a0c30e5.png

Мы можем найти последнюю версию этого плагина на Maven Central . В нашем примере мы добавили только один исходный каталог, но плагин позволяет нам добавить столько, сколько мы хотим .

4. Вывод

В этом руководстве мы узнали, как добавить несколько исходных каталогов с помощью build-helper-maven-plugin .

Как всегда, полный исходный код примеров доступен на GitHub .