【问题标题】:Maven zip artifact copy, unzip and renameMaven zip 工件复制、解压和重命名
【发布时间】:2018-01-03 02:46:32
【问题描述】:

我有一个 maven 模块,它使用 maven-shade-plugin 命名为 my-artifact-1.0-SNAPSHOT.zip

将工件安装到本地 maven 存储库后,我需要:

  1. 将 zip 复制到配置的本地文件夹。
  2. 解压存档。
  3. 将解压后的文件夹从 my-artifact-1.0-SNAPSHOT 重命名为 my-artifact

这个过程应该是跨平台的,适用于 Windows、Linux、MacOS 机器。

我读到它可以通过使用来完成:

  1. maven-dependency-plugin 加上另一个插件
  2. maven-groovy-plugin

实现这种流程的最佳方式是什么?任何例子都非常感谢。

【问题讨论】:

  • 如果你正确定义了依赖,这个工件将自动下载并缓存在你的本地存储库中......所以问题是为什么你需要解压缩它?如果它是由 maven-shade-plugin 创建的,它通常是一个包含许多类的 jar 文件...所以 zip 文件不是一个好主意...
  • 我的artifact不是一个普通的jar文件,它是talend enterprise studio使用的一个zip文件。对于本地开发,我已经实现了解压缩构建工件并部署到 talend 工作室的流程。仅用于本地开发。

标签: java maven groovy maven-plugin


【解决方案1】:

在我看来,不需要 antrun,maven-dependency-plugin 应该可以解决问题:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>[your.group.id]</groupId>
                                <artifactId>my-artifact-1.0-SNAPSHOT</artifactId>
                                <version>[your.version]</version>
                                <type>zip</type>
                                <outputDirectory>${project.basedir}/my-artifact/</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>

问候,

汤姆

【讨论】:

  • 几乎可以工作。这种配置的结果将是: ${project.basedir}/my-artifact/my-artifact-1.0-SNAPHOST/...{artifact_items}... 我不需要路径中的 my-artifact-1.0-SNAPSHOT
  • 让我重新表述这个问题。我需要设置解压目录名。在文档中没有找到。
  • 嗯,好的,这不能直接与 maven-dependency-plugin afaik 一起使用......但问题似乎是 Zip-Archive 中的目录,我猜 my-artifact-1.0-SNAPSHOT 在也有吗?您可以使用 maven-assembly-plugin 创建一个没有路径的 zip 文件(在程序集描述符中使用 /
  • 工件本身就是一个 zip 文件。所有模块文件都在 my-artifact-1.0-SNAPSHOT.zip 我需要将它们解压缩到 /mypath/my-artifact/...
  • 是的,我明白了。但是在我的例子中,如果你有一个 zipfile my-artifact-1.0-SNAPSHOT.zip\myFile.txt 它会将 myFile.txt 放在 /my-artifact/myFile.txt 下......如果你有一个 zipfile my-artifact- 1.0-SNAPSHOT.zip\my-artifact-1.0-SNAPSHOT\myFile.txt 它将转到 /my-artifact/my-artifact-1.0-SNAPSHOT/myFile.txt。因此,一种解决方案是删除 zip 文件本身中的路径 ...
【解决方案2】:

你有一个可以执行 Ant-Tasks 的 maven 插件。这个任务让你执行很多工作。例如,解压缩文件:

<plugins>
   <plugin>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>1.8</version>
      <executions>
         <execution>
            <phase>generate-resources</phase>
            <configuration>
               <tasks>
                  <unzip src="path/to/zip/file.zip" dest="path/to/unzip" />
               </tasks>
            </configuration>
            <goals>
               <goal>run</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
</plugins>

您可以在 apache ant 页面中查看所有可用任务(请参阅参考资料)。

参考: https://ant.apache.org/manual/Tasks

【讨论】:

  • 我正在努力配置 unzip.src 的工件 zip 文件路径
猜你喜欢
  • 2011-11-15
  • 2012-02-14
  • 2014-06-04
  • 2016-10-13
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多