1. 概述
在本教程中,我们将解释如何在基于 Maven 的 Java 项目中添加多个源目录。
2. 额外源目录
假设我们需要在 src/main 中添加一个 /newsrc 源目录:
首先,我们在 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 项目之前,让我们快速浏览一下该项目的结构:
现在, 如果我们尝试编译它,我们将收到编译错误 :
[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 的默认生命周期包含编译之前的几个阶段: validate 、 initialize 、 generate-sources 、 process-sources 、 generate-resources 、 process-resources 和 compile 。因此,在这里,我们在 Maven 编译源代码之前添加一个新的源目录。
现在,我们将编译该项目,然后构建成功。之后, 当我们检查目标文件夹时,我们将看到该插件从两个源目录生成类 :
我们可以在Maven Central上找到该插件的最新版本。 我们在示例中只添加了一个源目录,但该插件允许我们添加任意多个源目录 。
4。结论
在本教程中,我们学习了如何使用 build-helper-maven-plugin 添加多个源目录。
与往常一样,示例的完整源代码可在 GitHub 上获取。