You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven打包需求:将指定资源文件打包为ZIP并嵌入生成的JAR包中

Maven打包需求:将指定资源文件打包为ZIP并嵌入生成的JAR包中

我来帮你解决这个Maven打包的问题~其实不用找什么“一站式”插件,用Maven的几个标准插件配合就能完美搞定,而且能严格按你要的顺序执行:先把index.js打包成function.zip,再把这个ZIP文件嵌入最终的JAR包。

具体实现步骤

核心思路是分两步走:

  1. 用maven-assembly-plugin生成目标ZIP文件
  2. 把生成的ZIP文件复制到Maven打包时会自动包含的目录(target/classes),这样最终JAR包就会带上它

以下是完整的POM配置片段,你可以直接加到你的pom.xml里:

<build>
    <plugins>
        <!-- 第一步:生成function.zip -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.4.2</version>
            <executions>
                <execution>
                    <id>create-zip</id>
                    <phase>process-resources</phase> <!-- 在资源处理阶段生成ZIP -->
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <descriptors>
                            <descriptor>src/main/assembly/zip-assembly.xml</descriptor>
                        </descriptors>
                        <finalName>function</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                        <outputDirectory>${project.build.directory}/zip-temp</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- 第二步:把生成的ZIP复制到target/classes,让JAR包自动包含它 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.3.1</version>
            <executions>
                <execution>
                    <id>copy-zip-to-classes</id>
                    <phase>process-resources</phase> <!-- 紧接ZIP生成之后执行 -->
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.outputDirectory}</outputDirectory> <!-- target/classes -->
                        <resources>
                            <resource>
                                <directory>${project.build.directory}/zip-temp</directory>
                                <includes>
                                    <include>function.zip</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后你需要在项目根目录下创建src/main/assembly/zip-assembly.xml文件,用来定义ZIP的打包规则:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
    <id>zip</id>
    <formats>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/src/main/resources</directory>
            <includes>
                <include>index.js</include>
            </includes>
            <!-- 这里如果不需要目录结构,直接把index.js放到ZIP根目录的话,就把outputDirectory留空 -->
            <!-- <outputDirectory>/</outputDirectory> -->
        </fileSet>
    </fileSets>
</assembly>

额外提示

  • 执行顺序:Maven会在process-resources阶段先运行assembly插件生成ZIP,紧接着运行resources插件把ZIP复制到target/classes,最后package阶段的jar插件会自动把target/classes下的所有文件(包括这个ZIP)打包进JAR。
  • 跨子项目共享:如果你要在多子项目里复用这个配置,把上面的插件配置放到父POM的<build><pluginManagement>里,子项目只需要引用对应的插件执行ID就行,不用重复写配置。

备注:内容来源于stack exchange,提问作者Skod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 10:35:28