Как установить права доступа к каталогу в выводе maven? - PullRequest
1 голос
/ 20 сентября 2011

Я использую плагин maven-assembly-plugin для упаковки своей сборки.

Я могу выполнить некоторое копирование наборов файлов и корректно изменить разрешения для файлов, но не могу изменить разрешения для каталогов.Из документации я пытаюсь использовать каталоги, которые меня интересуют.Однако независимо от того, какие разрешения я указываю, каталоги ВСЕГДА создаются на основе текущего umask (0022).Кто-нибудь знает чистый способ изменить права доступа к каталогам таким образом во время сборки Maven.Единственное, что работает, это umask 0, но я бы не стал этого делать, поскольку каждый, кто работает над этим проектом, должен иметь этот набор.

Пример maven assembly.xml:

<?xml version="1.0"?>
<assembly>
  <id>zip-with-dependencies</id>
  <formats>
    <format>dir</format>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>

  <dependencySets>
    <dependencySet>
      <includes>
        <include>foo:bar</include>
      </includes>
      <outputDirectory>/resources/blah</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <unpack>true</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>

  <fileSets>
    <fileSet>
      <directory>${basedir}/src/main/web</directory>
      <includes>
        <include>some_dir</include>
      </includes>
      <outputDirectory>web</outputDirectory>
      <fileMode>0777</fileMode>
      <directoryMode>0777</directoryMode>
    </fileSet>
  </fileSets>
</assembly>

Ответы [ 3 ]

2 голосов
/ 03 июня 2015

У меня была такая же проблема. Я протестировал все вышеперечисленные решения, и ни одно из них не помогло мне. Лучшее решение, которое я имел в виду, и это сработало для меня, - это предварительно создать эти родительские папки как пустые папки, прежде чем писать в них.

Итак, чтобы обратиться к исходной проблеме, вы должны использовать:

<fileSet>
    <directory>./</directory>
    <outputDirectory>/resources</outputDirectory>
    <excludes>
        <exclude>*/**</exclude>
    </excludes>
    <directoryMode>0700</directoryMode>
</fileSet>

Это должно быть помещено перед фактической копией в подпапку ресурсов в вашем примере.

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

С другой стороны, кто бы ни использовал tar для упаковки файлов, без этого набора файл tar не будет иметь разрешения, установленные для этой родительской папки. Таким образом, извлечение приведет к созданию новой папки, но с разрешениями извлекающего пользователя + его umask.

0700 использовался только для примера, конечно.

1 голос
/ 06 марта 2015

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

В pom укажите значения по умолчанию для всего zip-файла.

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.2</version>

            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>

                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>

            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/descriptor.xml</descriptor>
                </descriptors>
                <archiverConfig>
                    <directoryMode>0755</directoryMode>
                    <defaultDirectoryMode>0755</defaultDirectoryMode>
                    <fileMode>0644</fileMode>
                </archiverConfig>
            </configuration>
        </plugin>

Затем в дескрипторе сборки я предоставляю переопределения для отдельных папок, которые не должны иметь разрешений по умолчанию.

<fileSets>
    <fileSet>
        <directory>src/conf</directory>
        <outputDirectory>conf</outputDirectory>
        <fileMode>0600</fileMode>
        <directoryMode>0700</directoryMode>
    </fileSet>
    <fileSet>
        <directory>src/db</directory>
        <outputDirectory>db</outputDirectory>
    </fileSet>
    <fileSet>
        <directory>src/bin</directory>
        <outputDirectory>bin</outputDirectory>
        <fileMode>0755</fileMode>
    </fileSet>

Здесь файлам в каталоге bin будет присвоено состояние выполнения для всех пользователей. Каталог conf и файлы в нем доступны только владельцу, а каталог db наследует разрешения от настроек в pom.

Настройки файла сборки описаны в http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

Я не смог найти никакой официальной документации по разделу конфигурации, кроме проблемы JIRA, которая была обнаружена amra.

1 голос
/ 20 сентября 2011

Я обнаружил проблему JIRA , описывающую это поведение.Обходной путь должен быть

<configuration>
    <archiverConfig>
        <fileMode>420</fileMode> <!-- 420(dec) = 644(oct) -->
        <directoryMode>493</directoryMode> <!-- 493(dec) = 755(oct) -->
        <defaultDirectoryMode>493</defaultDirectoryMode>
    </archiverConfig>
</configuration>
...