Maven - как включить пустые каталоги - PullRequest
30 голосов
/ 09 апреля 2010

По умолчанию в процессе сборки maven удаляет пустые каталоги.
Знаете ли вы, можно ли указать параметр в pom, чтобы указать maven включить пустые каталоги в сгенерированную папку target / test-classes?

Ответы [ 5 ]

35 голосов
/ 09 апреля 2010

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

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

Для версий Maven, которые включали старую версию плагина Resources:

Пока эта проблема не будет устранена, вот обходной путь, который я успешно использовал.
Добавьте этот элемент плагина в project/build/plugins в вашем pom.xml и измените каталог в задаче mkdir.

Вы можете иметь несколько <mkdir> элементов для нескольких каталогов. Задача mkdir ничего не делает, если каталог уже скопирован плагином ресурсов.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>create-empty-directory</id>
      <phase>process-classes</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <tasks>
          <mkdir dir="${basedir}/target/classes/empty" />
        </tasks>
      </configuration>
    </execution>
  </executions>
</plugin>

Первоначально он был получен из openejb-standalone pom.xml в проекте openejb.

15 голосов
/ 09 апреля 2010

Зачем вам нужны пустые папки в target / test-classes?

С другой стороны, вы можете использовать плагин сборки для создания пустых папок в файлах zip / tar.gz.

Просто создайте запись в вашем дескрипторе сборки, которая ссылается на существующую папку (в данном случае src / main / resources / bin ...

<fileSet>
  <directory>src/main/resources/bin</directory>
  <outputDirectory>/logs</outputDirectory>
  <directoryMode>0755</directoryMode>
  <excludes>
    <exclude>*</exclude>
  </excludes>
</fileSet>

Вышеприведенное работает также для файлов .tar.gz и zip. Директивный режим выше необходим только в том случае, если вы создаете файлы .tar.gz.

Вторая возможность - создать пустую папку в структуре папок, которая включена в плагин сборки (например, zip, tar.gz и т.

2 голосов
/ 09 апреля 2010

Мы обычно решаем эту проблему, добавляя пустой файл-заполнитель в любые каталоги, которые нам нужно создать, но которые не имеют полезного содержимого во время сборки.

Это также имеет то преимущество, что форматы файлов (например, zip-файлы), которые не допускают концепцию пустых каталогов, все равно будут создавать правильную структуру каталогов.

1 голос
/ 29 июня 2015

Если это не работает, вы можете использовать Maven Resources Plugin 2.7 .

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <includeEmptyDirs>true</includeEmptyDirs>
            </configuration>
        </plugin>
1 голос
/ 13 августа 2013

Я использовал сборочный плагин, как предложил khmarbaise, но чтобы заставить его работать, мне нужно было использовать исключение в стиле Ant, чтобы убедиться, что файлы или каталоги не попадают в архив:

<excludes>
    <exclude>**/*</exclude>
</excludes>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...