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

Maven生成含依赖与测试的Jar包:报错及依赖缺失问题

搞定Maven打包可运行Jar的那些问题

看起来你在打包LeanFT测试项目时遇到了两个头疼的问题:先是用maven-jar-plugin打包报错,后来换了maven-assembly-plugin虽然生成了Jar,但运行时缺依赖。我来一步步帮你解决:

1. 先解决第一个报错:repository element was not specified in the POM inside distribution

这个错误其实是执行mvn deploy命令才会触发的——因为deploy需要把你的Jar上传到远程仓库,但你的pom里没配置<distributionManagement>节点来指定仓库地址。

如果你的目标只是生成可运行Jar,完全不用管这个错误,只要执行mvn package而不是mvn deploy就行。要是以后真需要部署到远程仓库,再给pom加个distributionManagement配置就行,现在先专注打包的核心需求。

2. 解决依赖没打包进Jar的问题

你用的maven-assembly-plugin没生效,主要是两个原因:

  • 默认不会包含system scope的依赖(就是你本地的LeanFT SDK那些Jar)
  • 没把插件绑定到Maven的package生命周期,得手动执行特殊命令才会生成带依赖的Jar

给你一套完整的assembly插件配置

把你原来的assembly插件替换成下面的代码,它会帮你搞定所有问题:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.6.0</version> <!-- 用最新稳定版,避免旧版本的bug -->
    <configuration>
        <archive>
            <manifest>
                <mainClass>test.LeanFTest</mainClass> <!-- 保持你的主类配置 -->
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <!-- 关键:强制包含system scope的LeanFT依赖 -->
        <includeScope>system</includeScope>
        <!-- 如果需要排除log4j.properties,取消下面这段注释 -->
        <!--
        <excludes>
            <exclude>**/log4j.properties</exclude>
        </excludes>
        -->
    </configuration>
    <executions>
        <execution>
            <id>build-fat-jar</id>
            <phase>package</phase> <!-- 绑定到package阶段,执行mvn package自动生成 -->
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

打包步骤

  1. 先清理之前的编译产物:mvn clean
  2. 执行打包:mvn package
  3. 去target目录找生成的Jar,名字应该是LeanFT-1.0-SNAPSHOT-jar-with-dependencies.jar,这个就是包含所有依赖的可运行Jar

额外检查点

  • 确认你的主类test.LeanFTest确实在src/main/java/test/LeanFTest.java路径下,类名和包名要完全匹配
  • 如果log4j.properties在src/main/resources里,默认会被打包进去;要是你确实需要排除,就把上面配置里的注释去掉

3. 备选方案:用maven-shade-plugin打包

要是assembly插件还是有问题,试试maven-shade-plugin,它对system依赖的处理更灵活,配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.5.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>test.LeanFTest</mainClass>
                    </transformer>
                </transformers>
                <!-- 显式指定要包含的依赖,包括system scope的LeanFT包 -->
                <artifactSet>
                    <includes>
                        <include>com.hp.lft:*</include>
                        <include>log4j:*</include>
                        <include>org.testng:*</include>
                        <include>org.hamcrest:*</include>
                        <include>commons-io:*</include>
                    </includes>
                </artifactSet>
            </configuration>
        </execution>
    </executions>
</plugin>

用这个插件的话,执行mvn clean package后,target目录下的LeanFT-1.0-SNAPSHOT.jar就是带所有依赖的可运行Jar,直接运行就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:17:54