Keep permissions on files with Maven resources:testResources

后端 未结 3 1097
被撕碎了的回忆
被撕碎了的回忆 2020-12-29 20:56

Is it possible to keep permissions on file with Maven resources:testResources? My use case is a Selenium binary driver that I put in /src/test/resources that I would like to

相关标签:
3条回答
  • 2020-12-29 21:33

    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 讨论(0)
  • 2020-12-29 21:40

    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>
    
    0 讨论(0)
  • 2020-12-29 21:46

    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>
    
    0 讨论(0)
提交回复
热议问题