Maven主要使用assembly插件来修改文件权限,用的标签为<fileMode/>和<directoryMode/>,分别用来修改文件权限和目录权限。
注:assembly插件的版本需要注意,之前用的3.1.0的版本,<fileMode/>和<directoryMode/>都不生效,最后切换成2.4.1版本才可以。具体原因没有去查,不知道是不是3.1.0的BUG。
一、列出修改文件权限主要涉及的标签,由于<dependencySet/>和<fileSet/>使用比较频繁,所以使用其举例。
1、<sources/>、<binaries/>。
<moduleSets> <moduleSet> <sources> <fileMode/> <directoryMode/> <fileSets> <fileSet> <fileMode/> <directoryMode/> </fileSet> </fileSets> </sources> <binaries> <fileMode/> <directoryMode/> <dependencySets> <dependencySet> <fileMode/> <directoryMode/> </dependencySet> </dependencySets> </binaries> </moduleSet> </moduleSets>
2、<fileSet>
<fileSets> <fileSet> <fileMode/> <directoryMode/> </fileSet> </fileSets>
3、<file/>
<files> <file> <fileMode/> </file> </files>
4、<dependencySet/>
<dependencySets> <dependencySet> <outputDirectory/> <fileMode/> <directoryMode/> </dependencySet> </dependencySets>
5、<repository/>
<repositories> <repository> <fileMode/> <directoryMode/> </repository> </repositories>
二、使用<dependencySet/>的例子。
1、在pom里面加上assembly插件。
<artifactId>test-assembly</artifactId> <groupId>tarGz</groupId> <version>1.0.0</version> <packaging>pom</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <!-- 版本要注意 --> <executions> <execution> <id>test-targz</id> <!-- 随意,在输出端显示 --> <phase>package</phase> <!-- 绑定在package生命周期 --> <goals> <goal>single</goal> <!-- 只执行一次 --> </goals> </execution> </executions> <configuration> <appendAssemblyId>false</appendAssemblyId> <!-- 打包出来的名字是否包含AssemblyId,AssemblyId在描述文件中定义,默认为true --> <descriptors> <descriptor>src/assembly/test-assembly.xml</descriptor> <!-- 描述文件路径 --> </descriptors> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>test.project</groupId> <artifactId>test-java</artifactId> <version>1.0.0</version> <scope>provided</scope> <type>zip</type> </dependency> </dependencies>
2、构造assembly文件,在src/main/assembly下新建test-assembly.xml,内容如下:
<assembly> <id>tar-gz</id> <formats> <format>tar.gz</format> <!-- 打包成tar.gz格式,如果需要打包成zip格式,填写zip --> </formats> <includeBaseDirectory>true</includeBaseDirectory> <!-- 如果为true,打包出来的文件结构第一层为pom.xml里面定义的artifactId-version --> <fileSets> <fileSet> <directory>${project.basedir}/src/main/resources</directory> <!-- 包含当前工程的目录src/main/resources文件夹 --> <outputDirectory>/</outputDirectory> <!-- 输出到首层目录 --> <fileMode>0777</fileMode> <!-- 所有文件文件权限为777 --> <directoryMode>0755</directoryMode> <!-- 所有目录权限为777 --> </fileSet> </fileSets> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <!-- 输出到lib目录下 --> <includes> <include>test.project:test-java</include> <!-- 依赖的库的路径,格式为groupId:artifactId --> </includes> <fileMode>0755</fileMode> <directoryMode>0755</directoryMode> <unpack>true</unpack> <!-- 是否解压依赖的包 --> <unpackOptions> <excludes> <exclude>classes/**</exclude> <!-- 排除classes目录及其所有子文件(包括子目录) --> <exclude>test/**</exclude> <!-- 排除test目录及其所有子文件(包括子目录) --> </excludes> </unpackOptions> </dependencySet> </dependencySets> </assembly>
3、工程结构如下:
src/ main/ assembly/ test-assembly.xml resources/ x1/ file1.txt x2/ pom.xml
4、打包出来的文件名为test-assembly-1.0.0.tar.gz,如果appendAssemblyId为true,则文件名为test-assembly-1.0.0-tar-gz.tar.gz。
结构如下:
test-assembly-1.0.0/ x1/ file1.txt x2/ lib/ bin/ lib/
如果includeBaseDirectory为false,则没有test-assembly-1.0.0这一层目录。
LAST:
关于文件权限的内容,可参见Linux/Unix系统文件权限解析。
关于assembly插件官方文档,可查看官网。