开发者

Keep permissions on files with Maven resources:testResources

开发者 https://www.devze.com 2023-03-16 08:50 出处:网络
Is it possible to keep permissions on file with Maven resources:testResources? My use case is a Selenium binary driver that I put in /开发者_JAVA技巧src/test/resources that I would like to be able to

Is it possible to keep permissions on file with Maven resources:testResources? My use case is a Selenium binary driver that I put in /开发者_JAVA技巧src/test/resources that I would like to be able to use from my tests. My -rwxr-xr-x is however changed to -rw-r--r-- in target/test-classes.


This seems to be a bug in the Maven Resource Plugin

If you are using the Maven Assembly Plugin, you can configure the file permissions there.

If not, you might consider a workaround. You could do this via Ant by doing something like this:

<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>


I added a profile that gets activated automatically when run on a Unix machine. It executes an in-line shell script to adopt file permissions from all files in a folder recursively to files of the same name in another folder (see SRC and DST variables). The script requires a /bin/sh as well as find, xargs and chmod, which should exist on all modern systems.

    <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>


My solution is to execute the scripts in a way that do not mind the flags. So, for instance, when running from Maven Exec Plugin, I use:

Before:

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

After:

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

Note: If you use bash -c, it will also fail if the exec flag is off.


Adding this remarks from Jason van Zyl, one of the creators of Maven:

The maven-resources-plugin was never intended to create any resources that would be used in a naked filesystem. It was strictly intended to place resources into the resultant artifact for use in a platform independent way, in general from the classpath. If you want to move archives around that are going to be unpacked and used I suggest the assembly plugin for making the archives and the dependency plugin for unpacking them.

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号