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

Eclipse中Maven构建可执行Jar时本地Jar未打包的问题求助

解决Maven打包时System Scope依赖未纳入可执行Jar的问题

你遇到的核心问题是system scope的依赖默认不会被Maven打包插件包含——这个scope的设计初衷是标记「由运行环境提供的系统级依赖」,所以Maven会默认跳过将它打包进最终的可执行Jar,这就导致运行时找不到com.sample.commons.*下的类。

下面给你几个可行的解决方案,按推荐程度排序:

方案1:将本地Jar安装到本地Maven仓库(最规范)

这是最符合Maven依赖管理理念的做法,能彻底避免system scope带来的各种路径和依赖管理问题:

  • 打开终端,执行以下命令(替换path/to/scp-commons.jar为你的Jar实际本地路径):
    mvn install:install-file -Dfile=path/to/scp-commons.jar -DgroupId=_GroupID1_ -DartifactId=scp-commons -Dversion=1 -Dpackaging=jar
    
  • 修改pom.xml里的scp-commons依赖,删除<scope>system</scope>和<systemPath>这两行,只保留核心依赖配置:
    <dependency>
        <groupId>_GroupID1_</groupId>
        <artifactId>scp-commons</artifactId>
        <version>1</version>
    </dependency>
    
  • 重新执行mvn package,此时Maven会自动从本地仓库拉取依赖,打包时也会正常把scp-commons的类合并进main.jar。

方案2:修改Assembly插件的Descriptor,强制包含System依赖

如果不想把Jar安装到本地仓库,可以在你的assemblytoola.xml里添加配置,让assembly插件强制包含system scope的依赖:

<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>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <!-- 开启对system scope依赖的包含 -->
            <includeScope>system</includeScope>
            <!-- 把依赖解压后合并到最终Jar里 -->
            <unpack>true</unpack>
        </dependencySet>
    </dependencySets>
</assembly>

保存后重新执行mvn package,assembly插件就会把scp-commons的类打包进最终的可执行Jar了。

方案3:改用Maven Shade插件(更省心的打包方式)

Maven Shade插件是专门用来构建包含所有依赖的可执行Jar的工具,默认支持处理system scope的依赖,替换你pom.xml里的assembly插件为以下配置即可:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version> <!-- 可替换为最新稳定版 -->
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <!-- 指定主类,生成可执行Jar的Manifest -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.sample.client.pat.toola.CpatToolA</mainClass>
                    </transformer>
                </transformers>
                <!-- 明确包含你的scp-commons依赖 -->
                <artifactSet>
                    <includes>
                        <include>_GroupID1_:scp-commons</include>
                    </includes>
                </artifactSet>
            </configuration>
        </execution>
    </executions>
</plugin>

执行mvn package后,Shade插件会自动把所有依赖(包括system scope的scp-commons)合并到最终的Jar中,同时生成正确的可执行Manifest。


内容的提问来源于stack exchange,提问作者Jason Xavier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:27:45