如何使用maven程序集插件在tar中创建和包含zip文件

时间:2015-08-21 17:20:13

标签: java maven maven-assembly-plugin

我有一个项目正在使用maven程序集插件将一堆文件包含到tar中。现在我想在该tar中包含更多文件,但首先我要将它们压缩并实际包含该zip文件。

我尝试过这样的事情:maven-assembly plugin - how to create nested assemblies

所以基本上在maven assempbly插件中创建了2个执行,并且第一次执行创建了第二个执行可以打包到tar中所需的zip文件。

但我收到错误消息称zip文件不是文件'。

我在做什么有什么问题?
有没有更有效的方法来做到这一点?

这就是我的尝试:
我的POM:

<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>zip-id</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
    <fileSet>
      <directory>${project.basedir}/src/main/resources/vertica_schema/schema_migrations</directory>
     <outputDirectory>/</outputDirectory>
    </fileSet>
</fileSets>

zip.xml

<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://maven.apache.org/plugins/maven-assembly-  plugin/assembly/1.1.2"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>tar-id</id>
<formats>
    <format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files> 
    <file>
        <source>/*.zip</source>
        <outputDirectory>/lib</outputDirectory>
        <destName>schema_migrations.zip</destName>
    </file>
</files> 

tar.xml

html

1 个答案:

答案 0 :(得分:3)

<source>代码不支持*:只能用它选择一个文件。此外,第一次执行的zip文件将在target folder by default内生成,因此您应该指向该目录。

默认情况下,zip文件名为${project.build.finalName}-zip-id.zip。您可以通过在插件配置中设置finalName属性来更改此名称。请注意,默认情况下,程序集ID将连接到finalName。您可以通过将appendAssemblyId标记切换为false来关闭此功能。

这是一个有效的配置:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
                <executions>
                    <execution>
                        <id>create-zip</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>zip.xml</descriptor>
                            </descriptors>
                            <finalName>myzip</finalName> <!-- Name of zip file -->
                            <appendAssemblyId>false</appendAssemblyId> <!-- Do not concatenate "zip-id" to the finalName" -->
                        </configuration>
                    </execution>
                    <execution>
                        <id>create-tar</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                        <descriptors>
                            <descriptor>tar.xml</descriptor>d
                        </descriptors>
                </configuration>
                </execution>
            </executions> 
        </plugin>
    </plugins>
</build>

使用以下tar.xml

<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://maven.apache.org/plugins/maven-assembly-  plugin/assembly/1.1.2"
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>tar-id</id>
<formats>
    <format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files> 
    <file>
        <source>${project.basedir}/target/myzip.zip</source>
        <outputDirectory>/lib</outputDirectory>
        <destName>schema_migrations.zip</destName>
    </file>
</files>

将Maven生成的所有内容保存在target目录下是一种很好的做法。这是Maven的工作文件夹,您不必担心将中间文件保留在那里。