问题 使用Maven创建tar.gz存档


我有一个Maven项目,在src / main目录下有一个名为output的子目录。这个文件夹需要打包成tar.gz.使用程序集插件时如下:

从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实用程序本身,这意味着在解压缩时获取 产量 目录及其所有内容。我得到的是包含所有项目路径的输出文件夹 - name / src / main / output。


7642
2017-07-25 20:21


起源



答案:


您需要将程序集描述符配置为  包括基目录并为其配置输出目录 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目标
$ tar zxvf Q3330855-1.0-SNAPSHOT-bundle.tar.gz
输出/
输出/ hello.txt的

也可以看看


14
2017-07-25 20:44



只是想补充一点,如果你需要选择单个文件,可以使用include / include: maven.apache.org/plugin-developers/cookbook/... - D_K


答案:


您需要将程序集描述符配置为  包括基目录并为其配置输出目录 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目标
$ tar zxvf Q3330855-1.0-SNAPSHOT-bundle.tar.gz
输出/
输出/ hello.txt的

也可以看看


14
2017-07-25 20:44



只是想补充一点,如果你需要选择单个文件,可以使用include / include: maven.apache.org/plugin-developers/cookbook/... - D_K


尝试设置 outputDirectory 在里面 fileSet。那应该删除src / main / output目录。

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

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

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

1
2017-07-25 20:40