Як додати додатковий вихідний каталог для maven для компіляції та включення в jar build?


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

Відповіді:


144

Ви можете використовувати плагін 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
Чи затьмарення справді розпізнає таку папку як одну з buildpaths для когось? Тому що це не для мене. FWIW, я використовую m2eдля імпорту проекту.
mystarrocks

Чудова відповідь, лише для уточнення, вам слід замінити ваш плагін maven-compiler рядками зверху ...
Колін

Працює і в IntelliJ.
Олександр Клімецьчек

1
Eclipse попросив мене встановити плагін для m2e, роз'єм допоміжної збірки. Я зробив це, і помилка життєвого циклу зникла.
Alexis Dufrenoy

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 у каталог цільових / класів і не буде компілювати джерела.

Оновіть pom.xmlяк -

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

2
NetBeans підхопив це як шарм :)
Аттіла

1
Здається, вам потрібно видалити ** виключення для доданої папки на шляху збірки Eclipse :(
Dormouse

@Dormouse, ти можеш пояснити будь ласка?
Saikat

1
Не працює з IntelliJ, він буде бачитись <resource>як папка "Ресурс", але не як папка "Джерело", наприклад, він не компілюватиме вихідні файли Java всередині них.
Олександр Климечек

4
Це рішення просто перемістить вихідні файли Java у каталог цільових / класів і не буде компілювати джерела
Stefan Haberl

12

7
Це замінює каталог src / main / java за замовчуванням. Якщо вам потрібні декілька каталогів, вам також слід вказати стандартний.
Natix

2
Питання полягає в тому, як додати кілька вихідних каталогів, і ви пропонуєте метод, щоб додати лише один вихідний каталог, який є протилежним запитуваному.
João Matos

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некопіювали.
Дарт Android
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.