Maven 程序集插件:包含文件而不获取其路径文件夹

Dan*_*uez 7 directory zip dependencies maven maven-assembly-plugin

我使用 maven-assemble-plugin 将依赖项 ZIP(也使用程序集插件生成)中的文件包含到最终发布的 ZIP 文件中。

问题是我想从依赖项中选择要获取的文件,但不复制这些文件所在的文件夹路径。只是文件。

例如:

<assembly>
    <formats>
        <format>zip</format>
        <format>dir</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <dependencySets>
        <dependencySet>
            <includes>
                <include>package:artifactId:zip:*</include>
            </includes>
            <outputDirectory>sql/update/01.00.00_to_01.01.00</outputDirectory>
            <unpack>true</unpack>
            <unpackOptions>
                <includes>
                    <include>oracle/update/1_alter_schema.sql</include>
                    <include>oracle/update/2_insert_data.sql</include>
                </includes>
            </unpackOptions>
            <useProjectArtifact>false</useProjectArtifact>
            <useTransitiveDependencies>false</useTransitiveDependencies>
        </dependencySet>
    </dependencySet>
</assembly>
Run Code Online (Sandbox Code Playgroud)

这会复制所需的文件,如下所示:

  • sql/update/01.00.00_to_01.01.00/ oracle/update/ 1_alter_schema.sql
  • sql/update/01.00.00_to_01.01.00/ oracle/update/ 2_insert_data.sql

我想只复制没有原始oracle/update/文件夹的文件,从而产生以下文件夹结构:

  • sql/update/01.00.00_to_01.01.00/1_alter_schema.sql
  • sql/update/01.00.00_to_01.01.00/2_insert_data.sql

依赖项 ZIP 包含不同项目使用的许多文件,因此区分 oracle 和 sql-server 文件的结构在那里是有意义的,但对于这个发行版,我不需要这些文件夹,只需要文件。

有人知道 maven- assembly-plugin 是否可以做到这一点?

提前谢谢了!

zaf*_*003 6

从 maven- assembly-plugin ( maven- assembly-plugin )的文档中我可以看到该<fileSets>标签没有为我们提供更改所包含资源的路径的选项。相反,我们可以使用<file>赋予我们这种灵活性的标签。

例如,以下配置将在提取的 zip 文件的根文件夹中包含 file1.jar 和 run.bat,跳过它们的原始路径。

<assembly>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <files>
    <file>
      <source>target/file1.jar</source>
      <destName>file1.jar</destName>
    </file>
    <file>
      <source>src/main/resources/run.bat</source>
      <destName>run.bat</destName>
    </file>
  </files>
</assembly>
Run Code Online (Sandbox Code Playgroud)


Tom*_*ome 4

它应该通过拆分依赖项解压缩和文件程序集来工作。

在执行组装工作之前配置依赖插件以解压所需的依赖项:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <configuration>
        <includeArtifactIds>project-sql</includeArtifactIds>
        <outputDirectory>${project.build.directory}/extract</outputDirectory>
        <includes>oracle/update/1_alter_schema.sql,oracle/update/2_insert_data.sql</includes>
    </configuration>
    <executions>
        <execution>
            <id>unpack-sql</id>
            <phase>prepare-package</phase>
            <goals><goal>unpack-dependencies</goal></goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

然后,在您的assembly-distribution.xml中,只需从子目录进行组装:

<?xml version="1.0" encoding="UTF-8"?>
<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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>distribution-${project.version}</id>

    <formats>
        <format>zip</format>
        <format>dir</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/extract/oracle/update</directory>
            <outputDirectory>sql/update/01.00.00_to_01.01.00</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>
Run Code Online (Sandbox Code Playgroud)