29

是否可以使用 Maven 资源:testResources 保留文件权限?我的用例是一个 Selenium 二进制驱动程序,我将它放在 /src/test/resources 中,我希望能够从我的测试中使用它。然而,我-rwxr-xr-x的更改为-rw-r--r--目标/测试类。

4

3 回答 3

38

这似乎是Maven 资源插件中的一个错误

如果您使用的是 Maven 程序集插件,则可以在那里配置文件权限

如果没有,您可能会考虑一种解决方法。您可以通过 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>
于 2011-06-29T13:47:51.243 回答
3

我添加了一个在 Unix 机器上运行时自动激活的配置文件。它执行一个内嵌 shell 脚本,以递归方式将文件夹中所有文件的文件权限应用于另一个文件夹中的同名文件(请参阅 SRC 和 DST 变量)。该脚本需要 a/bin/sh以及和find,它们应该存在于所有现代系统上。xargschmod

    <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>
于 2015-07-14T16:02:54.590 回答
0

我的解决方案是以不介意标志的方式执行脚本。因此,例如,当从 Maven Exec 插件运行时,我使用:

前:

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

后:

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

注意:如果您使用bash -c,如果 exec 标志关闭,它也会失败。


添加来自 Maven 的创建者之一 Jason van Zyl 的评论:

maven-resources-plugin 从未打算创建将在裸文件系统中使用的任何资源。它严格旨在将资源放入生成的工件中,以便以独立于平台的方式使用,通常来自类路径。如果您想移动将要解包和使用的档案,我建议您使用程序集插件来制作档案,并使用依赖插件来解包它们。

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

于 2019-08-09T11:02:22.080 回答