web-dev-qa-db-ja.com

Mavenリソースを使用してファイルのアクセス許可を保持します:testResources

Maven resources:testResourcesを使用してファイルのパーミッションを保持することは可能ですか?私のユースケースは、テストから使用できるようにしたい/ src/test/resourcesに配置したSeleniumバイナリドライバーです。ただし、target/test-classesでは-rwxr-xr-x-rw-r--r--に変更されています。

28
Viktor Hedefalk

これは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>
32
wjans

Unixマシンで実行すると自動的にアクティブになるプロファイルを追加しました。インラインシェルスクリプトを実行して、フォルダー内のすべてのファイルから別のフォルダー内の同じ名前のファイルにファイルのアクセス許可を再帰的に採用します(SRC変数とDST変数を参照)。スクリプトには、/bin/shfindxargs、および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>
3
Robin479

私の解決策は、フラグを気にしない方法でスクリプトを実行することです。したがって、たとえば、Maven Execプラグインから実行する場合は、次を使用します。

前:

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

後:

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

注:bash -cを使用する場合、execフラグがオフの場合も失敗します。


Mavenの作成者の1人であるJasonvanZylからのこのコメントを追加します。

Maven-resources-pluginは、ネイキッドファイルシステムで使用されるリソースを作成することを意図したものではありませんでした。一般にクラスパスから、プラットフォームに依存しない方法で使用するために、結果のアーティファクトにリソースを配置することを厳密に意図していました。解凍して使用するアーカイブを移動したい場合は、アーカイブを作成するためのアセンブリプラグインと、アーカイブを解凍するための依存関係プラグインをお勧めします。

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

0
Ondra Žižka