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

如何用Maven assembly生成含可执行JAR及所有资源的ZIP包?

问题核心原因

你当前的配置存在2个核心错误:

  1. 错误将assembly插件的descriptor配置写在了maven-shade-plugin的参数中,shade插件不识别该配置,也不会负责生成zip包
  2. assembly.xml中同时配置了指向普通项目jar的file规则、以及会引入未shade的项目jar和依赖的dependencySet规则,导致zip中打包的是普通jar而非可运行的shaded jar

修正步骤

1. 替换pom.xml中的插件配置

删除原有的shade插件配置,替换为以下两个独立插件配置,执行顺序自动为shade先生成可运行jar,assembly后打包zip:

<plugins>
    <!-- 第一步:shade插件生成带主类的可运行jar -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.4</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.sgs.terminal.Run</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <!-- 第二步:assembly插件打包zip -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

2. 修正assembly.xml配置

如果你已经通过shade插件将所有依赖打入了可运行jar中,不需要在zip中额外存放依赖jar,可以删除原有的dependencySet配置,避免空间浪费,修正后的assembly.xml参考如下:

<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>dist</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <files>
        <!-- 引入shade生成的可运行jar -->
        <file>
            <source>target/${project.artifactId}-${project.version}.jar</source>
        </file>
    </files>
    <!-- 若确实需要额外将依赖放到lib目录,再保留以下dependencySet配置,否则删除 -->
    <!--
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <useProjectArtifact>false</useProjectArtifact>
            <scope>compile</scope>
        </dependencySet>
    </dependencySets>
    -->
    <fileSets>
        <fileSet>
            <directory>${project.basedir}</directory>
            <includes>
                <include>README*</include>
                <include>LICENSE*</include>
                <include>NOTICE*</include>
                <include>pom.xml</include>
            </includes>
            <useDefaultExcludes>true</useDefaultExcludes>
        </fileSet>
        <fileSet>
            <directory>${project.build.sourceDirectory}/src</directory>
            <useDefaultExcludes>true</useDefaultExcludes>
        </fileSet>
        <fileSet>
            <directory>lib</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*</include>
                <include>*/*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>images</directory>
            <outputDirectory>images</outputDirectory>
            <includes>
                <include>*</include>
                <include>*/*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}</directory>
            <includes>
                <include>*.dll</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

3. 执行验证

运行mvn clean package命令,即可在target目录下得到包含可运行shaded jar和所有指定文件的zip包。

内容的提问来源于stack exchange,提问作者maryem neyli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:24:03