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

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

6 ответов

Решение

Вы можете использовать плагин Build Helper, например:

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

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

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

Чтобы пометить папку как сгенерированные источники и получить ее с помощью IntelliJ, используйте следующее:

      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <generatedSourcesDirectory>src/main/generated</generatedSourcesDirectory>
    </configuration>
</plugin>

Я потратил час на поиски того, как избежать возврата IntelliJ после того, как я вручную пометил target/generated-sources как папку сгенерированных источников. Плагин codehaus.mojo не работал. Но это решение помогло!

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

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

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

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

Другие вопросы по тегам