使用Maven创建tar.gz归档文件

15

我有一个Maven项目,其中在src/main目录下有一个名为output的子目录。这个文件夹需要打包成tar.gz格式。在使用如下配置的assembly插件时:

pom.xml文件中:

<build>
<finalName>front</finalName>
<plugins>
    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptors>
        <descriptor>src/main/assembly/assembly.xml</descriptor>
      </descriptors>
    </configuration>
  </plugin>
  </plugins>
</build>

汇编文件 assembly.xml:

<assembly>
    <id>bundle</id> 
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>src/main/output</directory>
        </fileSet>
</fileSets>
</assembly>

我的问题是,我想得到的结果就像运行tar工具本身一样,也就是说,在提取时获取输出目录及其所有内容。但是我得到的是将输出文件夹与整个项目路径-名称/src/main/output包装在一起。

2个回答

24

您需要配置程序集描述符,不要包括基本目录,并为fileSet配置一个输出目录:

<assembly>
  <id>bundle</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>src/main/output</directory>
      <outputDirectory>output</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

使用上述汇编描述符,在运行重现结构的项目时,我会得到以下结果:

$ mvn clean assembly:assembly
...
$ cd target
$ tar zxvf Q3330855-1.0-SNAPSHOT-bundle.tar.gz 
output/
output/hello.txt

另请参阅


1
只是想补充一下,如果你需要选择单个文件,可以使用 includes/include:http://maven.apache.org/plugin-developers/cookbook/generate-assembly.html - D_K
投票++...也许还可以提及一下清单文件。 - z atef

1

尝试在fileSet中设置outputDirectory。这样应该可以删除src/main/output目录。

<fileSet>
  <directory>src/main/output</directory>
  <outputDirectory>.</outputDirectory>
</fileSet>

你可能还需要将includeBaseDirectory设置为false。这将删除名称目录。

<assembly>
  <id>bundle</id> 
  <includeBaseDirectory>false</includeBaseDirectory>
  <!-- ... -->

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接