Maven Assembly Plugin问题:descriptorRef未使用basedir的咨询
解决Maven Assembly Plugin中descriptorRef未使用basedir的问题
我之前在使用Maven Assembly插件打包Web应用时也碰到过类似的路径配置问题,咱们来一步步梳理解决方案:
首先,先明确核心问题:你当前使用的是自定义Assembly描述符(也就是自己写的assembly.xml),而descriptorRef是用来引用Maven预定义打包模板(比如jar-with-dependencies、bin这类)的参数。如果混用这两种配置,或者插件配置里错误地使用了descriptorRef而非指定自定义描述符路径,就会出现basedir不匹配的问题。
正确的插件配置方式(自定义描述符)
把你的插件配置改成下面这样,重点是用descriptor指定自定义的assembly.xml路径,而非descriptorRef:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <!-- 建议使用最新稳定版本 --> <executions> <execution> <id>webapp-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <!-- 指定你的自定义assembly配置文件路径 --> <descriptor>src/main/assembly/assembly.xml</descriptor> <finalName>webapp-build</finalName> <appendAssemblyId>false</appendAssemblyId> <!-- 避免文件名自动加上assembly的id后缀 --> </configuration> </execution> </executions> </plugin> </plugins> </build>
你的自定义assembly配置验证
你现有的assembly.xml配置是没问题的,它会把项目根目录下dist文件夹里的所有内容,直接打包到ZIP的根目录(因为outputDirectory设为.,且includeBaseDirectory为false):
<assembly> <id>webapp-build</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <directory>dist</directory> <outputDirectory>.</outputDirectory> <includes> <include>**/*</include> </includes> </fileSet> </fileSets> </assembly>
如果你确实需要结合预定义模板(descriptorRef)
如果你的场景需要同时使用预定义的descriptorRef和自定义配置,可以同时配置descriptorRefs和descriptors,但要注意路径冲突:
<configuration> <descriptorRefs> <descriptorRef>bin</descriptorRef> <!-- 引用预定义的bin模板 --> </descriptorRefs> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> <!-- 加上自定义配置 --> </descriptors> </configuration>
这种情况下,预定义模板的basedir设置会和自定义配置合并,需要确保fileSet的路径不会互相覆盖。
最后检查点
- 确认
assembly.xml的存放路径和插件配置里的descriptor路径一致(比如上面示例中放在src/main/assembly/下) - 确保
dist文件夹确实在项目根目录下,或者根据实际路径调整directory的值 - 升级插件到最新稳定版,避免旧版本的路径解析bug
内容的提问来源于stack exchange,提问作者louis amoros
相关产品推荐
相关产品推荐

