是否可以使用Maven资源:testResources保留文件权限?我的用例是一个Selenium二进制驱动程序,我把它放在/src/test/resources中,希望能够在测试中使用它。但是,在目标/测试类中,我的-rwxr-xr-x
被更改为-rw-r--r--
。
这似乎是Maven资源插件中的一个错误
如果您使用的是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机器上运行时会自动激活。它执行一个内嵌shell脚本,以递归方式将文件夹中所有文件的文件权限应用到另一个文件夹中相同名称的文件(请参见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 " | 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的创建者之一Jason van Zyl的以下评论:
maven资源插件从未打算创建任何将在裸文件系统中使用的资源。它严格地旨在将资源放置到生成的工件中,以便以独立于平台的方式使用,通常是从类路径使用。如果你想四处移动将被解压缩和使用的档案,我建议使用用于制作档案的汇编插件和用于解压缩档案的依赖插件。
http://maven.40175.n5.nabble.com/maven-resources-plugin-not-retaining-unix-permissions-td4938002.html