【问题标题】:how in maven multiple folders to the multiple zip archives with the same names如何在 Maven 多个文件夹中到多个具有相同名称的 zip 档案
【发布时间】:2019-01-22 02:02:09
【问题描述】:

我想使用 Maven 收集项目模块 我有一个目录结构。文件夹可以加dirN:

project-module
 |
 |-dir1
 |-dir2
 |-dir3
 |-...
 |-dirN
 |-bin.xml
 |-pom.xml

我尝试了 maven-assembly-plugin

pom.xml

<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptors>
            <descriptor>bin.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>sql dir</id>
            <goals>
                <goal>single</goal>
            </goals>
            <phase>package</phase>
        </execution>
    </executions>
</plugin>
</plugins>

bin.xml

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>bin</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>../mspost-db</directory>
            <excludes>
                <exclude>*.*</exclude>
            </excludes>
            <useDefaultExcludes>false</useDefaultExcludes>
            <!--<outputDirectory>/</outputDirectory>-->
        </fileSet>
    </fileSets>
</assembly>

期望的结果 每个目录要打包到一个同名的 zip 存档文件夹中,即。

project-module
 |
 |-targer
   |-dir1.zip
   |-dir2.zip
   |-dir3.zip
   |-...
   |-dirN.zip

请帮帮我。

【问题讨论】:

    标签: maven


    【解决方案1】:

    iterator-maven-plugin 可用于处理单个程序集描述符:

    <plugin>
      <groupId>com.soebes.maven.plugins</groupId>
      <artifactId>iterator-maven-plugin</artifactId>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>iterator</goal>
          </goals>
          <configuration>
            <items>
              <item>dir1</item>
              <item>dir2</item>
              <item>dir3</item>
            </items>
            <pluginExecutors>
              <pluginExecutor>
                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-assembly-plugin</artifactId>
                </plugin>
                <goal>single</goal>
                <configuration>
                  <descriptors>
                    <descriptor>${project.basedir}/bin.xml</descriptor>
                  </descriptors>
                  <finalName>${item}</finalName>
                  <appendAssemblyId>false</appendAssemblyId>
                </configuration>
              </pluginExecutor>
            </pluginExecutors>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

    然后在bin.xml中引用${item}

    <?xml version="1.0" encoding="UTF-8"?>
    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
        <id>${item}</id>
        <formats>
            <format>zip</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory>
        <fileSets>
            <fileSet>
                <directory>${project.basedir}/${item}</directory>
                <outputDirectory>/</outputDirectory>
            </fileSet>
        </fileSets>
    </assembly>
    

    这会导致 target/dir1.zip 等。

    除了显式列出&lt;items&gt;之外,它还可以迭代&lt;folder&gt;,尽管我没有看到可以限制为dir*的方法。

    (编辑开始)

    例如迭代parentDir的(直接)子目录:

      <configuration>
        <folder>${project.basedir}/parentDir</folder>
        <pluginExecutors>
        ... as above ...
    

    程序集描述符 (bin.xml) 可以像以前一样引用 &lt;directory&gt;${project.basedir}/parentDir/${item}&lt;/directory&gt; 之类的内容。

    如果迭代 &lt;folder&gt;${project.basedir}&lt;/folder&gt;,缺少过滤器仍然是一个问题 - 这也会压缩 target 目录。

    【讨论】:

    • 感谢您的回答。假设我想遍历一个 ,我将如何在 bin.xml 文件中使用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2018-06-04
    • 2023-01-11
    相关资源
    最近更新 更多