Сохранять разрешения для файлов с ресурсами Maven:testResources

Можно ли сохранить разрешения на файл с ресурсами Maven:testResources? Мой пример использования - бинарный драйвер Selenium, который я помещаю в / src / test / resources, который я хотел бы использовать в своих тестах. Мой -rwxr-xr-x, однако, изменен на -rw-r - r-- в целевых / тестовых классах

2 ответа

Решение

Это похоже на ошибку в Maven Resource Plugin

Если вы используете плагин Maven Assembly, вы можете настроить разрешения для файлов там.

Если нет, вы можете рассмотреть обходной путь. Вы можете сделать это через Ant, выполнив что-то вроде этого:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>process-test-classes</id>
            <phase>process-test-classes</phase>
            <configuration>
                <target>
                    <chmod file="target/test-classes/test.sh" perm="755"/>
                </target>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Я добавил профиль, который активируется автоматически при запуске на Unix-машине. Он выполняет встроенный сценарий оболочки для рекурсивного принятия прав доступа ко всем файлам в папке к файлам с таким же именем в другой папке (см. Переменные SRC и DST). Скрипт требует /bin/sh так же как find, xargs а также chmod, который должен существовать на всех современных системах.

    <profile>
        <id>unix</id>
        <activation>
            <os>
                <family>unix</family>
            </os>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>fix-resource-permissions</id>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                            <phase>process-test-resources</phase>
                            <configuration>
                                <executable>/bin/sh</executable>
                                <arguments>
                                    <argument>-c</argument>
                                    <argument>
                                        set -x

                                        SRC="${basedir}/src/test/resources"
                                        DST="${project.build.directory}/test-classes"

                                        find "$$SRC" -printf "%P\0" | xargs --verbose -0 -I {} chmod --reference="$$SRC/{}" -f "$$DST/{}"
                                    </argument>
                                </arguments>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

Мое решение состоит в том, чтобы выполнить сценарии так, чтобы они не обращали внимания на флаги. Так, например, при запуске из плагина Maven Exec я использую:

До:

<executable>myScript.sh</executable>
<commandlineArgs>...</commandlineArgs>

После:

<executable>bash</executable>
<commandlineArgs>myScript.sh ...</commandlineArgs>

Примечание: если вы используете bash -c, он также потерпит неудачу, если флаг exec выключен.


Добавляя это замечание от Джейсона ван Зила, одного из создателей Maven:

Плагин maven-resources-plugin никогда не предназначался для создания каких-либо ресурсов, которые будут использоваться в голой файловой системе. Он был строго предназначен для помещения ресурсов в результирующий артефакт для использования независимо от платформы, как правило, из пути к классам. Если вы хотите переместить архивы, которые будут распакованы и использованы, я предлагаю плагин сборки для создания архивов и плагин зависимости для их распаковки.

http://maven.40175.n5.nabble.com/maven-resources-plugin-not-retaining-unix-permissions-td4938002.html

Другие вопросы по тегам