1. Обзор
В этом руководстве мы объясним, как добавить несколько исходных каталогов в проект Java на основе Maven.
2. Дополнительный исходный каталог
Предположим, нам нужно добавить исходный каталог /newsrc
внутрь src/main
:
Во-первых, давайте создадим простой файл класса 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, давайте кратко рассмотрим структуру проекта:
Теперь, если мы попытаемся скомпилировать его, мы получим ошибку компиляции :
[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 скомпилирует исходный код.
Теперь мы скомпилируем проект, после чего сборка завершится успешно. После этого, когда мы проверим целевую папку, мы увидим, что плагин генерирует классы из обоих исходных каталогов :
Мы можем найти последнюю версию этого плагина на Maven Central . В нашем примере мы добавили только один исходный каталог, но плагин позволяет нам добавить столько, сколько мы хотим .
4. Вывод
В этом руководстве мы узнали, как добавить несколько исходных каталогов с помощью build-helper-maven-plugin
.
Как всегда, полный исходный код примеров доступен на GitHub .