Как добавить дополнительный исходный каталог для maven для компиляции и включения в сборку jar?

В дополнение к src/main/java, я добавляю каталог src/bootstrap, который я хочу включить в мой процесс сборки, другими словами, я хочу, чтобы maven собирал и включал источники в мою сборку. Как!?

Ответ 1

Вы можете использовать Плагин поддержки сборки, например:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>some directory</source>
                ...
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Ответ 2

ПРИМЕЧАНИЕ. Это решение просто переместит исходные файлы java в каталог target/classes и не скомпилирует исходные файлы.

Обновите pom.xml как -

<project>   
 ....
    <build>
      <resources>
        <resource>
          <directory>src/main/config</directory>
        </resource>
      </resources>
     ...
    </build>
...
</project>

Ответ 4

Вы можете добавить каталоги для своего процесса сборки, например:

    ...
   <resources>
     <resource>
       <directory>src/bootstrap</directory>
     </resource>
   </resources>
   ...

src/main/java - это путь по умолчанию, который не требуется указывать в pom.xml

Ответ 5

В последних версиях Maven (3) и последней версии плагина компилятора maven (3.7.0) я заметил, что добавление исходной папки с помощью build-helper-maven-plugin не требуется, если папка, содержащая исходный код для добавления в сборке находится в target папке или ее подпапке.
Кажется, что плагин компилятора maven компилирует любой исходный код Java, расположенный внутри этой папки, независимо от каталога, в котором они находятся.
Например, имея некоторый (сгенерированный или нет) исходный код в target/a, target/generated-source/foo будет скомпилирован и добавлен в outputDirectory: target/classes.