Подтвердить что ты не робот

Maven - как включить пустые каталоги

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

4b9b3361

Ответ 1

В соответствии с этот билет 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.

Ответ 2

Зачем вам нужны пустые папки под целевыми/тестовыми классами?

С другой стороны, вы можете использовать плагин сборки для создания пустых папок в файлах 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. Приведенный выше тип directoryMode необходим только при создании файлов .tar.gz.

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

Ответ 3

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

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

Ответ 4

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

<excludes>
    <exclude>**/*</exclude>
</excludes>

Ответ 5

Если он не работает, вы можете использовать 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>