Как создать пустые папки с архетипом Maven? - PullRequest
16 голосов
/ 07 мая 2010

Существует проблема для этого подхода, расположенная на Codehaus JIRA # ARCHETYPE-57 , но все инструкции, указанные в этом билете, не были выполнены для меня. Также пост в блоге marekdec Как получить архетип maven для генерации пустых каталогов для меня не получается.

Трюк в archetype.xml с трейлингом / не работает для меня:

<resources>
  <resource>src/main/webapp/</resource>

Unable to find resource 'archetype-resources/src/main/webapp/'

Также каталог fileSet в archetype-metadata.xml не работает для меня:

<fileSet filtered="true" encoding="UTF-8">
 <directory>src/main/webapp/</directory>
</fileSet>

Я использую следующий maven-archetype-plugin для создания моего собственного архетипа.

mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:create

Есть ли другое решение? Или я что-то пропустил? Спасибо

Ответы [ 3 ]

21 голосов
/ 07 мая 2010

Я сделал быстрый тест и ... у меня это сработало. Сначала я создал архетип:

$ mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
                            -DgroupId=com.stackoverflow \
                            -DartifactId=Q2786966 \
                            -Dversion=1.0-SNAPSHOT \

Я переименовал archetype.xml в archetype-metadata.xml (первый для Archetype 1.0.X, последний для Archetype 2.0.X), поэтому проект выглядит так:

$ tree .
.
├── pom.xml
└── src
    └── main
        └── resources
            ├── archetype-resources
            │   ├── pom.xml
            │   └── src
            │       ├── main
            │       │   └── java
            │       │       └── App.java
            │       └── test
            │           └── java
            │               └── AppTest.java
            └── META-INF
                └── maven
                    └── archetype-metadata.xml

А archetype-metadata.xml содержит:

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="Q2786966">
  <fileSets>
    <fileSet filtered="true" encoding="UTF-8">
      <directory>src/main/webapp</directory>
    </fileSet>
    <fileSet filtered="true" packaged="true">
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.java</include>
      </includes>
    </fileSet>
  </fileSets>
</archetype-descriptor>

Затем я установил архетип и использовал его для создания проекта:

$ mvn install
$ cd ~/tmp
$ mvn archetype:generate -B -DarchetypeGroupId=com.stackoverflow \
                            -DarchetypeArtifactId=Q2786966 \
                            -DarchetypeVersion=1.0-SNAPSHOT \
                            -DgroupId=my.group \
                            -DartifactId=my-artifact \
                            -Dversion=1.0-SNAPSHOT

И получившийся проект выглядит так:

$ tree my-artifact/
my-artifact/
├── pom.xml
└── src
    └── main
        ├── java
        │   └── my-group
        │       └── App.java
        └── webapp

Там находится пустой каталог веб-приложения.

11 голосов
/ 23 марта 2012

Я решил эту проблему, добавив следующую конфигурацию в конфигурацию сборки архетипов pom.xml.

Предполагая, что наборы файлов вашего файла конфигурации archetype-metadata.xml следующие:

<fileSet encoding="UTF-8">
 <directory>src</directory>
  <includes>
   <include>**/**</include>
  </includes>
</fileSet>

Добавьте это к вашему pom.xml, а не к тому, который включен в архетип, к реальному проекту pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <includeEmptyDirs>true</includeEmptyDirs>
  </configuration>
</plugin>

Строка конфигурации xml, которая творит чудеса:

<includeEmptyDirs>true</includeEmptyDirs>

Полная конфигурация будет выглядеть следующим образом

<project ...>
...

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <includeEmptyDirs>true</includeEmptyDirs>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>
5 голосов
/ 17 августа 2011

Я встретил ту же проблему с первым ответом на этот вопрос . Переконфигурирование подключаемого модуля maven-resources.

Согласно этому тикету MRESOURCES-36 должен быть элемент <<code>includeEmptyDirs>, но только для Maven Resources Plugin 2.3.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <includeEmptyDirs>true</includeEmptyDirs>
  </configuration>
</plugin>
...