1. 概述

在本教程中,我们将解释如何在基于 Maven 的 Java 项目中添加多个源目录。

2. 额外源目录

假设我们需要在 src/main 中添加一个 /newsrc 源目录:

maven项目1

首先,我们在 src/main/newsrc/ 文件夹中创建一个简单的 Java 类文件 DataConnection.java

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 项目之前,让我们快速浏览一下该项目的结构:

mavenProjectWithSubDir

现在, 如果我们尝试编译它,我们将收到编译错误

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

我们可以理解错误消息的根本原因——我们在常规项目目录配置之外定义了 DataConnection 类。

Maven 默认只支持一个源文件夹 。要配置多个源目录, 我们需要使用一个名为 build-helper-maven-plugin 的 Maven 插件

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 的默认生命周期包含编译之前的几个阶段: validateinitializegenerate-sourcesprocess-sourcesgenerate-resourcesprocess-resourcescompile 。因此,在这里,我们在 Maven 编译源代码之前添加一个新的源目录。

现在,我们将编译该项目,然后构建成功。之后, 当我们检查目标文件夹时,我们将看到该插件从两个源目录生成类

mavenProjectWithSubDirWithTarget

我们可以在Maven Central上找到该插件的最新版本。 我们在示例中只添加了一个源目录,但该插件允许我们添加任意多个源目录

4。结论

在本教程中,我们学习了如何使用 build-helper-maven-plugin 添加多个源目录。

与往常一样,示例的完整源代码可在 GitHub 上获取。