7

我正在构建一个原型,我想在其中包含一个包含一些可执行二进制文件的文件夹。问题是当我从原型创建一个新项目时,可执行二进制文件是在没有可执行权限的情况下创建的。

如何告诉 maven 保留对这些文件的执行权限?或者也许有一种方法可以告诉 maven 在生成时自动添加执行权限?

4

3 回答 3

7

这个问题已经很老了,但是我发现自己处于同样的情况并且找到了解决方案,所以就到这里了。这里它说您可以在原型的 src/main/resources/META-INF/ 文件夹中编写一个名为archetype-post-generate.groovy的 groovy 脚本,以便在生成新项目后执行操作。该脚本应如下所示:

def file = new File( request.getOutputDirectory(), request.getArtifactId()+"RELATIVE_PATH" );
file.setExecutable(true, false);

其中request.getOutputDirectory()是创建新项目的目录,request.getArtifactId()是项目工件 ID。

于 2017-06-12T01:23:58.360 回答
1

我用 exec-maven-plugin 通过两次执行解决了类似的问题,一个是压缩目录,另一个是使用 bin 分类器部署到存储库中,在我的情况下是第三方。因此,我将所有 unix 权限保存在 zip 文件中。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
        <execution>
            <id>1</id>
            <phase>package</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>zip</executable>
                <workingDirectory>${basedir}</workingDirectory>
                <arguments>
                    <argument>-r</argument>
                    <argument>target/com.example.test.ext.zip</argument>
                    <argument>Out</argument>
                    <argument>-x</argument>
                    <argument>*.svn*</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>2</id>
            <phase>package</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>mvn</executable>
                <workingDirectory>${basedir}/target</workingDirectory>
                <arguments>
                    <argument>deploy:deploy-file</argument>
                    <argument>-Dfile=com.example.test.ext.zip</argument>
                    <argument>-Dclassifier=bin</argument>
                    <argument>-DgroupId=com.example</argument>
                    <argument>-DartifactId=test</argument>
                    <argument>-Dversion=1.0</argument>
                    <argument>-Dpackaging=zip</argument>
                    <argument>-DrepositoryId=releases</argument>
                    <argument>-Durl=http://nexus..../nexus/content/repositories/thirdparty
                    </argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

如果您将结果用作依赖项,请不要忘记“bin”分类器:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
        <execution>
            <id>unpack1</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>unpack</goal>
            </goals>
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>com.example</groupId>
                        <artifactId>test</artifactId>
                        <version>1.0-SNAPSHOT</version>
                        <classifier>bin</classifier>
                        <type>zip</type>
                        <overWrite>true</overWrite>
                        <outputDirectory>output</outputDirectory>
                    </artifactItem>
                </artifactItems>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2013-09-19T19:49:56.347 回答
0

有关在 Linux 和 Windows 平台上调用外部脚本的另一个示例,请参阅这篇文章

所以我通过添加以下内容来解决这个问题:

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <id>script-chmod</id>
                    <phase>install</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>chmod</executable>
                        <arguments>
                            <argument>+x</argument>
                            <argument>myscript</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>

但是,对于每次安装而不是仅在原型生成上运行它似乎很浪费,所以如果有人有任何更好的建议,那么很想听听他们的建议。

于 2014-06-20T15:27:17.480 回答