Плагин архетипа Maven не позволяет .resources в ресурсах архетипа через

Как я могу сделать такие ресурсы, как .gitignore, частью результирующего проекта?

  1. создать архетип с archetype-resources/.gitignore
  2. mvn install
  3. mvn archetype:generate
  4. результирующий проект не содержит .gitignore

PS. Я уверен, что его там нет.


person lisak    schedule 02.11.2011    source источник
comment
Все решения здесь решают только половину проблемы. Они строят архетип с помощью .gitignore: но как вы генерируете с помощью .gitignore?   -  person flungo    schedule 19.07.2016
comment
Здорово, что с каждой версией менялось поведение и работали те или иные твики. Ищете полное решение с последними версиями плагинов.   -  person Naman    schedule 03.01.2021
comment
Пример проекта для воспроизведения и решения проблемы, которую я пытаюсь решить, можно найти по адресу Github#fortybits/ немного архетипа   -  person Naman    schedule 03.01.2021


Ответы (8)


Ошибка, кажется, все еще присутствует в maven-archetype-plugin v3.0.1. Для тех, кто не хочет понижать версию maven-resource-plugin. Мне удалось установить более или менее уродливый обходной путь.

Сначала вы переименовываете archetype-resources/.gitignore в

__gitignore__

затем внутри archetype-metadata.xml добавить

<requiredProperties>
    <requiredProperty key="gitignore">
        <defaultValue>.gitignore</defaultValue>
    </requiredProperty>
</requiredProperties>

<fileSets>
    <fileSet>
        <directory></directory>
        <includes>
            <include>__gitignore__</include>
        </includes>
    </fileSet>
</fileSets>

Когда архетип сгенерирован, maven сначала скопирует __gitignore__, затем увидит синтаксис __[file]__ и заменит его значением по умолчанию «.gitignore».

person PODerik    schedule 01.03.2018
comment
Огромнейшее спасибо!... всем на заметку, это двойное _ :) - person xbmono; 28.05.2019
comment
Хотя я мог видеть, что файл __gitignore__ скопирован с последней версией архетипа, но файл не переименовывается maven. - person Naman; 03.01.2021
comment
Потрясающе спасибо! Это идеальный обходной путь - person Pasindu; 04.04.2021
comment
Что ж, я буду проклят. Можно было бы ожидать, что что-то настолько простое, как .gitignore, появляющееся в сгенерированном проекте, будет предоставлено, но по состоянию на 2021 год это все еще не так. Спасибо, это действительно работает отлично. - person CarlosGoncalves; 22.04.2021

Это решение для будущего плагина maven-resources-plugin v3.0.0 (еще не выпущенного на момент публикации; текущая версия все еще 2.7) из https://issues.apache.org/jira/browse/MRESOURCES-190 кажется лучше, чем сдерживать обновления версии:

<build>
  <plugins>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-resources-plugin</artifactId>
       <configuration>
          <!-- Required so that .gitignore gets included in archetypes; see https://issues.apache.org/jira/browse/MRESOURCES-190 -->
          <addDefaultExcludes>false</addDefaultExcludes>
person vorburger    schedule 19.05.2016
comment
Я могу подтвердить, что это работает, используя файл addDefaultExcludes. Использование архетипа 2.4 и maven-resources-plugin v.3.0.1 по-прежнему имеет ту же проблему. - person max; 31.10.2016
comment
addDefaultExcludes отлично работает, как описано здесь. Окончательно! - person seba.wagner; 27.02.2018
comment
Запись набора файлов в src/main/resources/META-INF/maven/archetype-metadata.xml по-прежнему необходима. См.: stackoverflow.com/a/8909897/3165190. - person Falko Menge; 24.10.2018

Добавьте запись fileSet в src/main/resources/META-INF/maven/archetype-metadata.xml с пустым тегом каталога:

<fileSet>
  <directory></directory>
  <includes>
    <include>.gitignore</include>
  </includes>
</fileSet>

Это скопирует включенные файлы из src/main/resources/archetype-resources в корневой каталог проекта.

person Marc Klinger    schedule 18.01.2012

Проверьте версию плагина maven-resources-plugin, запустив сборку Maven при отладке (с параметром -X). Если вы используете версию 2.7, возникает регрессия, при которой файлы .gitignore молча игнорируются.

В этом случае вам придется явно использовать 2.6 в вашем pom.xml:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
person jurevert    schedule 03.04.2015

ARCHETYPE/issues/ARCHETYPE-505 показывает, что это полностью не работает с текущими версиями плагина и maven. Никакие обходные пути больше не помогают в этом.

person dschulten    schedule 09.07.2020

Решение, которое отлично сработало для меня, состояло в том, чтобы использовать архетип после установки groovy script.

Создайте файл META-INF/archetype-post-generate.groovy в папке ресурсов вашего проекта архетипа.

Добавьте этот код:

file = new File( request.getOutputDirectory(), request.getArtifactId()+"/.gitignore.tmpl" );
def gitIgnorefile = new File( request.getOutputDirectory(), request.getArtifactId()+"/.gitignore" );
file.renameTo(gitIgnorefile)

В файл archetype-metadata.xml включите файл шаблона .gitignore.tmpl.

        <fileSet>
            <directory/>
            <includes>
                <include>.gitignore.tmpl</include>
            </includes>
        </fileSet>

У меня были проблемы с плагином ресурсов maven, поэтому я использовал отличное скриптовое решение.

person Amrut Prabhu    schedule 12.05.2020
comment
Вопрос был задан давно, и версия maven может быть чем-то другим или с ней может быть какая-то другая проблема. Пожалуйста, попробуйте объяснить свой ответ лучше, например, добавив версию maven или что-нибудь еще, что даст лучшее понимание вашего ответа. - person Sahil; 12.05.2020
comment
Проблема из исходного ответа актуальна еще раз для maven-archetype-plugin 3.2.0 и maven-resources-plugin 3.2.0. Предыдущий обходной путь (<addDefaultExcludes>false</addDefaultExcludes>) не работает, но решение с META-INF/archetype-post-generate.groovy отлично сработало для меня! - person Ivan Ponomarev; 16.02.2021

Альтернативой понижению версии maven-resources-plugin является принудительная версия plexus-utils, которая фактически имеет регрессию:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.7</version>
    <dependencies>
        <!-- it's for fixing maven-resources-plugin 2.7 MRESOURCES-190 -->
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-utils</artifactId>
            <!-- this is last 2.x release -->
            <version>2.1</version>
        </dependency>
    </dependencies>
</plugin>
person Rafał Wrzeszcz    schedule 31.07.2015

ошибка все еще присутствует в новейших версиях maven-archetype-plugin 2.4 и maven-resources-plugin 3.0.1.

вот решение:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>2.2</version>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
 </plugin>

и в вашем генераторе pom.xml вы должны добавить

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
 </plugin>
person user918888    schedule 12.08.2016
comment
решение vorburger лучше, так как оно не требует использования старых плагинов. - person Olivier Cailloux; 31.10.2016