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

95

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

chrisapotek
источник
Простой вопрос: почему бы не переместить исходный код в 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

http://maven.apache.org/guides/mini/guide-using-one-source-directory.html

<build>
<sourceDirectory>../src/main/java</sourceDirectory>

также см

Компиляция Maven с несколькими каталогами src

Кальпеш Сони
источник
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.

davidxxx
источник
-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