求助:Maven Assembly插件生成的tar.gz解压后自带install目录如何去除
解决Maven Assembly插件生成压缩包后顶层目录问题
我之前也碰到过这个坑!问题根源不在pom.xml的插件配置,而是你那个assembly/app-assembly.xml描述文件里的设置——大概率是你在descriptor里指定了顶层的install作为基础目录,或者文件集的输出路径带了install前缀。下面是具体的修复步骤:
1. 修改Assembly描述文件(核心操作)
打开你的assembly/app-assembly.xml,重点检查这两个关键点:
- 如果文件里存在
<baseDirectory>install</baseDirectory>这一行,直接删掉它,或者改成<baseDirectory>/</baseDirectory>(空路径,代表解压后直接放在当前目录)。 - 检查每个
<fileSet>的outputDirectory配置,确保不要写成install/lib或install/scripts,而是直接设为lib和scripts。
给你一个参考的正确descriptor示例:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> <id>bin</id> <!-- 这里不要设置baseDirectory为install,留空或设为/即可 --> <baseDirectory>/</baseDirectory> <formats> <format>tar.gz</format> </formats> <fileSets> <!-- 打包lib目录到压缩包的根目录下的lib --> <fileSet> <directory>${project.build.directory}/lib</directory> <outputDirectory>lib</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> <!-- 打包scripts目录到压缩包的根目录下的scripts --> <fileSet> <directory>${project.basedir}/src/main/scripts</directory> <outputDirectory>scripts</outputDirectory> <includes> <include>*.sh</include> <include>*.bat</include> </includes> <fileMode>0755</fileMode> <!-- 给脚本添加执行权限 --> </fileSet> </fileSets> </assembly>
2. 关于pom.xml的插件配置
你当前pom里的<finalName>install</finalName>只是生成的压缩包文件名(比如会生成install.tar.gz),和解压后的顶层目录无关,所以这个可以保留或者改成你想要的名称,不会影响解压后的目录结构。
3. 重新打包验证
执行打包命令:
mvn clean package assembly:single
如果已经把assembly插件绑定到了package生命周期阶段,直接执行:
mvn clean package
然后解压生成的tar.gz文件,就能直接看到lib和scripts目录,不会再出现顶层的install目录了。
内容的提问来源于stack exchange,提问作者Nikhil Joshi
相关产品推荐
相关产品推荐

