文件权限问题汇总-使用Maven修改文件权限/Maven assembly配置解析

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插件官方文档,可查看官网

猜你喜欢

转载自blog.csdn.net/shi2huang/article/details/79995474