Как создать пустые папки с архетипом maven?

Существует существующая проблема для этого подхода, расположенная на 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-архетип-плагин, чтобы создать свой собственный архетип.

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

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

Ответы

Ответ 1

Я сделал быстрый тест и... это сработало для меня. Во-первых, я создал архетип:

$ 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

Здесь находится пустой каталог webapp.

Ответ 2

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

Предполагая, что ваши файлы набора файлов архетипа-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>

Ответ 3

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

В соответствии с этим билетом MRESOURCES-36 должен быть элемент < includeEmptyDirs>, но только для Maven Resource 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>