Maven打包需求:将指定资源文件打包为ZIP并嵌入生成的JAR包中
Maven打包需求:将指定资源文件打包为ZIP并嵌入生成的JAR包中
我来帮你解决这个Maven打包的问题~其实不用找什么“一站式”插件,用Maven的几个标准插件配合就能完美搞定,而且能严格按你要的顺序执行:先把index.js打包成function.zip,再把这个ZIP文件嵌入最终的JAR包。
具体实现步骤
核心思路是分两步走:
- 用
maven-assembly-plugin生成目标ZIP文件 - 把生成的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
相关产品推荐
相关产品推荐

