使用Assembly Plugin不会将生成的文件复制到Maven项目zip中

时间:2016-06-25 20:34:59

标签: java maven maven-assembly-plugin

Java代码创建了一些文件,并在内部尝试复制到zip。但除了某些文件外,所有文件都被复我无法找出背后的原因。

我正在添加我尝试使用其权限复制的文件夹的目录结构,以及它在目标文件夹(zip文件)中复制的内容。

目录结构及其权限 -


XYZ-MacBook-Pro:etl_configs XYZ$ pwd
FILE_PATH_LOCATION/etl_configs

XYZ-MacBook-Pro:etl_configs XYZ$ ls -l *
-rw-r--r--  1 XYZ  staff   980 Jun 26 01:02 etl-spec.json
-rwxr-xr-x  1 XYZ  staff  2037 Jun 15 19:04 etl-without-transformation.json

feeds:
total 16
-rw-r--r--  1 XYZ  staff  612 Jun 26 00:54 feed_1.json
-rw-r--r--  1 XYZ  staff  616 Jun 26 01:02 feed_2.json

tables:
total 16
-rw-r--r--  1 XYZ  staff  878 Jun 26 00:54 table_1.json
-rw-r--r--  1 XYZ  staff  880 Jun 26 01:02 table_2.json

尝试使用maven插件以zip方式复制所有这些文件。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.5.5</version>
    <configuration>
        <descriptor>${project.basedir}/zip.xml</descriptor>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

zip.xml文件包含 -

<fileSet>
        <directory>${project.basedir}/etl_configs</directory>
        <outputDirectory>/etl_configs</outputDirectory>
        <includes>
                <include>*</include>
        </includes>
</fileSet>

目标zip文件包含 -

XYZ-MacBook-Pro:etl-without-transformation-template-1.0-SNAPSHOT XYZ$ pwd
FILE_PATH_LOCATION/target/etl-without-transformation-template-1.0-SNAPSHOT-zip/etl-without-transformation-template-1.0-SNAPSHOT 
XYZ-MacBook-Pro:etl-without-transformation-template-1.0-SNAPSHOT XYZ$ ls -l etl_configs/*
-rwxr-xr-x  1 XYZ  staff   980 Jun 26 01:02 etl_configs/etl-spec.json
-rwxr-xr-x  1 XYZ  staff  2037 Jun 15 19:04 etl_configs/etl-without-transformation.json

etl_configs/feeds:

etl_configs/tables:

理想情况下,它应该复制zip中的整个文件夹。但它没有发生。

1 个答案:

答案 0 :(得分:1)

该问题与您在程序集描述符中使用<includes>的方式有关。您目前使用

<fileSet>
    <directory>${project.basedir}/etl_configs</directory>
    <outputDirectory>/etl_configs</outputDirectory>
    <includes>
        <include>*</include>
    </includes>
</fileSet>

表示:“包含etl_configs下的所有文件”。这并不意味着“在etl_configs下递归包含所有文件”。这是因为您正在使用<include>*</include>maven-assembly-plugin使用Ant样式模式,而在Ant中* matches zero or more characters within a path name,不跨越目录边界。

因此,要递归地包含所有文件,您可以使用:

<fileSet>
    <directory>${project.basedir}/etl_configs</directory>
    <outputDirectory>/etl_configs</outputDirectory>
    <includes>
        <include>**</include>
    </includes>
</fileSet>

但是,this is the default behaviour

  

当存在<include>个子元素时,它们会定义一组要包含的文件和目录。如果不存在,则<includes>表示所有有效值。

所以你可以拥有:

<fileSet>
    <directory>${project.basedir}/etl_configs</directory>
    <outputDirectory>/etl_configs</outputDirectory>
</fileSet>