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


95

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


Простой вопрос: почему бы не переместить исходный код в src / main / java? Или создайте отдельный проект / модуль maven, содержащий код, и определите его как зависимость.
khmarbaise

7
В моем случае мне нужно добавить папку сгенерированных источников, которую я предпочитаю находиться внутри цели.
djjeck

В качестве альтернативы, один может понадобиться место интеграции-тестов в других каталогах , чем src/{main,test}/как сказано здесь
Y2K-Shubham

Это также обсуждалось здесь: stackoverflow.com/q/270445/1061929
bjmi

Ответы:


145

Вы можете использовать подключаемый модуль 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>

1
Действительно ли eclipse распознает такую ​​папку как одну из buildpathлюбых? Потому что это не для меня. FWIW, использую m2eдля импорта проекта.
mystarrocks

Отличный ответ, просто чтобы прояснить, вы должны заменить свой maven-compiler-plugin на строки сверху ...
Колин

Также работает в IntelliJ.
Александр Климечек

1
Eclipse попросил меня установить плагин для m2e, соединителя помощника сборки. Я сделал это, и ошибка жизненного цикла исчезла.
Alexis Dufrenoy 01

1
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:build-helper-maven-plugin:1.7:add-source (execution: add-source, phase: generate-sources)получение этой ошибки
Кэти

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

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

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

2
NetBeans подхватил это как шарм :)
Аттила

1
Похоже, вам действительно нужно удалить ** исключение для добавленной папки в пути сборки Eclipse :(
Dormouse

@ Соня, можешь объяснить, пожалуйста?
Saikat

1
Не работает с IntelliJ, он будет отображаться <resource>как папка «Ресурс», но не как папка «Исходный код», например, он не будет компилировать исходные файлы Java внутри них.
Александр Климечек

4
Это решение просто переместит исходные файлы java в каталог target / classes и не будет компилировать исходники
Стефан Хаберл

12

7
Это отменяет каталог по умолчанию src / main / java. Если вам нужно несколько каталогов, вы также должны указать каталог по умолчанию.
Natix

2
Вопрос в том, как добавить несколько исходных каталогов, и вы предлагаете метод добавления только одного исходного каталога, что противоположно тому, что задают.
Жуан Матос,

1

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


-1

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

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

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


2
Почему люди против? В основном тот же ответ, что и у saiky0 (у которого есть положительные голоса), но раньше?
Friso

15
@Friso, потому что это неправильно. Добавление каталога ресурсов добавит ресурсы (файлы, скопированные target/classes, но не скомпилированные). Этот вопрос о добавлении исходного каталога, который содержит файлы , которые будут скомпилированы в target/classesне копировали.
Darth Android
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.