【问题标题】:zip a file with maven to a NO java application directory使用 maven 将文件压缩到没有 java 应用程序目录
【发布时间】:2018-11-21 21:47:08
【问题描述】:

我不知道这是否可能。这就是我想做的。 我有一些使用 node js 构建 VUE.js 应用程序的 jenkins 管道。 使用“nmp run build”命令。此构建的结果是目录名称“静态”和 index.html 文件。之后,我将这 2 个压缩到一个 file.zip 中,然后上传到 Artifactory,以便稍后将其下载解压缩并将其放入 docker 文件中以构建映像,然后在 azure (ACI) 中构建容器。

我现在想对我已经用其他应用程序完成的那些 zip 实现一些版本控制,但在 Java 中使用 maven + POM + Maven+Metadata+Plugin + jenkins+ artifactory 我有 2 个工作。 1 个使用 maven 构建并将文件推送到工件的作业,以及使用“使用参数构建”选项从工件中选择 file.war 的其他作业。

我读过一些关于使用 maven 创建 zip 文件的内容,即使它不是 java 应用程序 here 并且对节点 js 执行相同操作。

那么,maven 是否可以压缩一个目录和一个文件,即使它们不是一个 java 应用程序,并包含作业编号来版本这个 zip 文件并推入工件?如果没有,这是最好的方法就像我使用 Java 和 maven 进行版本控制一样,但是对于 jenkins 管道中的 VUE.js 应用程序,将 zip 连同内部版本号一起推送到工件中,然后使用“带参数构建”选项来选择我想要的 zip? 谢谢!

【问题讨论】:

    标签: node.js maven jenkins vue.js artifactory


    【解决方案1】:

    您提到,您已经在使用 npm 来构建您的 Vue 应用程序。有用于压缩的 npm 库。你可以例如做这样的事情:

    const fs = require('fs');
    const archiver = require('archiver');
    
    const archive = archiver('zip', {
      zlib: { level: 9 }
    });
    
    const filename = "./output.zip";
    const fileOutput = fs.createWriteStream(filename);
    
    fileOutput.on('close', function() {
      console.info('ZIP file created. ' + archive.pointer() + ' total Bytes.');
    });
    
    archive.pipe(fileOutput);
    archive.directory('./input-directory', '/');
    
    archive.on('error', function(error) {
      throw error;
    });
    
    archive.finalize();
    

    这假设构建过程的输出存储在文件系统上的dist 文件夹中,并且您可以访问该文件系统。

    官方文档中有更多archiver的例子:https://github.com/archiverjs/node-archiver

    【讨论】:

    • 是的,但这是否与 jenkins 和 artifactory 有任何集成以用于某些版本控制?和maven一样吗?
    【解决方案2】:

    您可以使用带有程序集描述符的maven-assembly-plugin 构建一个 zip 文件。

    程序集描述符位于项目的src/assembly 目录中,名称类似于my-zip-format.xml。您需要自定义内容以包含所需的文件,但这就是想法。

    <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>my-zip</id>
    
        <formats>
          <format>zip</format>
        </formats>
    
        <fileSets>
          <fileSet>
            <directory>path/to/input/dir</directory>
            <outputDirectory>name-of-output-dir</outputDirectory>
            <directoryMode>0750</directoryMode>
            <fileMode>0640</fileMode>
            <lineEnding>unix</lineEnding>
          </fileSet>
        </fileSets>
    </assembly>
    

    然后,告诉 POM 使用程序集:

    ....
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version><pluginVersionHere></version>
        <executions>
          <execution>
            <id>make-zip</id>
            <phase>package</phase>
            <goals>
               <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>src/assembly/my-zip-format.xml</descriptor>
              </descriptors>
            </configuration>
            ...
    

    文档更详细,还有很多关于程序集插件细微差别的 SO 问题/答案。

    【讨论】:

    • 是的,我读到了,所以基本上我需要在包含静态目录和 index.html 的目录中创建并添加一个 POM 文件以及我猜的 zip.xml 和所有这些将它们放入名为 src/assembly 的目录中?还是目录名不重要?只需在静态文件夹和 index.html 中添加 pom 和 zip.xml?....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多