我正在构建一个原型,我想在其中包含一个包含一些可执行二进制文件的文件夹。问题是当我从原型创建一个新项目时,可执行二进制文件是在没有可执行权限的情况下创建的。
如何告诉 maven 保留对这些文件的执行权限?或者也许有一种方法可以告诉 maven 在生成时自动添加执行权限?
我正在构建一个原型,我想在其中包含一个包含一些可执行二进制文件的文件夹。问题是当我从原型创建一个新项目时,可执行二进制文件是在没有可执行权限的情况下创建的。
如何告诉 maven 保留对这些文件的执行权限?或者也许有一种方法可以告诉 maven 在生成时自动添加执行权限?
这个问题已经很老了,但是我发现自己处于同样的情况并且找到了解决方案,所以就到这里了。这里它说您可以在原型的 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。
我用 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>
有关在 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>
但是,对于每次安装而不是仅在原型生成上运行它似乎很浪费,所以如果有人有任何更好的建议,那么很想听听他们的建议。