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

使用Ant构建项目时出现java.lang.NoClassDefFoundError的解决方法

问题:Ant构建Spring Boot项目运行时抛出NoClassDefFoundError

Jar文件已成功生成,但运行阶段抛出如下错误:

[java] Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication
[java]     at com.example.DemoApplication.main(Unknown Source)
[java] Caused by: java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication
[java]     at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
[java]     at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
[java]     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
[java]     ... 1 more
[java] Java Result: 1

对应的build.xml内容:

<path id="classpath">
    <fileset dir="lib" includes="**/*.jar" />
</path>

<target name="clean">
    <delete dir="build"/>
    <delete dir="lib"/>
</target>

<target name="compile">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes" classpathref="classpath"/>
</target>

<target name="jar">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
        <manifest>
            <attribute name="Main-Class" value="com.example.DemoApplication"/>
        </manifest>
    </jar>
</target>

<target name="run" depends="jar">
    <java jar="build/jar/HelloWorld.jar" fork="true" />
</target>

<target name="all" depends="clean,resolve, compile, jar, run"/>

<target name="resolve">
    <ivy:retrieve />
</target>

</project>

解决方法

方法1:运行时指定完整类路径

当前run目标仅执行自己生成的Jar,但未加载lib目录下的依赖包。修改run目标,明确指定主类并包含完整类路径:

<target name="run" depends="jar">
    <java classname="com.example.DemoApplication" fork="true">
        <classpath>
            <path refid="classpath"/>
            <pathelement location="build/jar/HelloWorld.jar"/>
        </classpath>
    </java>
</target>

方法2:构建包含依赖的可执行胖Jar

如果希望生成独立可执行的Jar,可修改jar目标,将lib目录下的所有依赖包内容合并到生成的Jar中:

<target name="jar">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
        <manifest>
            <attribute name="Main-Class" value="com.example.DemoApplication"/>
        </manifest>
        <!-- 引入lib目录下的所有依赖Jar内容 -->
        <zipgroupfileset dir="lib" includes="**/*.jar"/>
    </jar>
</target>

两种方法任选其一即可解决类找不到的问题。注意all目标的执行顺序clean→resolve→compile→jar→run是正确的,能确保每次构建都重新下载依赖并编译打包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:50:33