尘世壹俗人 2025-01-27 14:18 采纳率: 81.3%
浏览 27
已结题

如何正确使用maven-assembly-plugin将项目打包成tar包

我需要使用maven-assembly-plugin将一个父子项目打包成一个tar包,在尝试阶段卡在了一个很难受的地方,结果聚合不在预期内。我的最终目的是根据描述文件将所有资源打包成为一个完整的tar,因此我在父项目的pom中写了如下的插件

    <build>
        <plugins>
            <plugin>
                <!-- 插件和版本 -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <!-- 描述文件,在父项目目录下 -->
                <configuration>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

随后在assembly.xml文件中写了如下的内容

<assembly>

    <id>bin</id>

    <!-- 指定结果集的格式-->
    <formats>
        <format>tar.gz</format>
    </formats>

   <includeBaseDirectory>true</includeBaseDirectory>

    <!-- 指定程序集中包含的文件集 -->
    <fileSets>
        <fileSet>
            <directory>bin</directory>
            <outputDirectory>bin</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
            <fileMode>0644</fileMode>
        </fileSet>
    </fileSets>

    <dependencySets>
        <dependencySet>
            <!-- 包含所有依赖项,到lib -->
            <outputDirectory>lib</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
        </dependencySet>
    </dependencySets>
</assembly>

我用来测试的项目结构很简单

img

但是在执行编译之后,效果却差强人意,common子模块中由于有代码和pom依赖,因此它在自己的target路径下生成的tar包只有lib路径,而父项目由于有bin目录,所有内部有bin下的资源

img

img

我是哪里配置的不对吗?

  • 写回答

5条回答 默认 最新

  • 尘世壹俗人 2025-01-27 17:01
    关注

    研究了半天,有点明白过来了,不一定对,但是目前有个能用的想法。

    这个想法的起点是在用spring-boot的编译插件时,不同的模块在做包的一部分时,有一个skip的参数,让不需要单独启动的web模块忽略主类的编译,从而用一个统一的编译模块指定主类打包。因此在实在是没办法在父项目中写编译插件实现统一打成一个包,包里有所有内容的情况下,我将其他模块中的maven-assembly-plugin编译打包插件删掉了,用一个统一的模块收集了所有需要打包的资源,在这个模块里面写了打包逻辑,尝试之后发现是可以的,所以目前就怎么用吧,实在没辙了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月27日
  • 已采纳回答 1月27日
  • 创建了问题 1月27日