【问题标题】:exception in thread main java.lang.noclassdeffounderror after build with ant使用 ant 构建后线程主 java.lang.noclassdeffounderror 中的异常
【发布时间】:2016-01-30 19:26:15
【问题描述】:

我使用以下 ant 脚本构建并部署了一个项目:

<?xm1 vertion="1.0" ?>
<project name="my project" default="build" basedir=".">

    <path id="project-classpath">
        <fileset dir="lib" includes="*.jar" />
    </path>
    
    <target name="build">
        <echo>Build</echo>
        <antcall target="clean"/>
        <antcall target="init"/>
        <antcall target="compile"/>
        <antcall target="package"/>
        <antcall target="deploy"/>
    </target>
    
    <target name="clean">
        <echo>Clean</echo>
        <delete dir="build/classes"/>
        <delete dir="dist"/>
    </target>
    
    <target name="init" depends="clean">
        <echo>Init</echo>
        <mkdir dir="build/classes"/>
        <mkdir dir="dist"/>
    </target>

    <target name="compile" depends="init">
        <echo>Compile</echo>
        <javac srcdir="src/myproject" destdir="build/classes"  classpathref="project-classpath"/>
    </target>

    <target name= "package" depends= "compile">
        <echo>Package</echo>
        <jar destfile="dist/project.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="myproject.Main"/>
            </manifest>
        </jar>
    </target>

    <target name="deploy" depends="package">
        <echo>Deploy</echo>
        <echo message="Dir: ${user.home}"/>
        <copy todir="${user.home}">
            <fileset dir="dist"/>
        </copy>
    </target>
    
</project>

当我检查部署 jar 文件的目录时,我找到了文件 project.jar,但是当我使用命令运行它时:

java -jar project.jar

我有以下一些错误:

线程“主”java.lang.NoClassDefFoundError 中的异常: javax/ws/rs/core/MultivaluedMap 在 java.lang.Class.getDeclarativeMethods0(Native Method)...

(如果我使用 IDE 运行,它工作正常。)

在我的 project.jar 中,我有以下树结构:

项目.jar

.....myproject(文件夹)

........Main.class(文件)

.....META-INF(文件夹)

........MANIFEST.MF(文件)

文件 MANIFEST.MF 包含以下内容:

清单版本:1.0

Ant 版本:Apache Ant 1.9.6

创建者:1.7.0_79-b14(甲骨文公司)

主类:myproject.Main

有人知道我做错了什么吗?

【问题讨论】:

    标签: java ant


    【解决方案1】:

    NoClassDefFoundError 表示该类在编译时存在,但在运行时缺失。 换句话说,javax/ws/rs/core/MultivaluedMap 在您运行生成的 jar 时不会出现在类路径中。

    在您的 IDE 中,您的项目正在使用未包含在您生成的 jar 中的外部库 (jar)。

    所以你需要将所需的库添加到类路径中,在本例中为jsr311-api

    【讨论】:

      【解决方案2】:

      运行 jar 时,您需要在类路径中包含 javax.ws.rs-api jar 库。

      java -classpath javax.ws.rs-api-2.0.1.jar -jar project.jar
      

      【讨论】:

      • 如何查看我正在使用的 jsr311 的版本?当我看到项目时,我看到其中一个库是 javax.ws.rs-api-2.0.1.jar,与这个库有什么关系?
      • 是的,我想你可以使用那个。
      • 您在使用 Eclipse 吗?启用“与编辑器链接”功能,找到您在代码中使用的该库的方法或类,将光标放在其上并按 F3:您最终会在哪个 jar 中?
      • 完成此操作后,它会打开 jar 文件 javax.ws.rs-api-2.0.1.jar 的新选项卡。
      • 你是把javax.ws.rs-api-2.0.1.jar放在project.jar的同一个目录下吗?
      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2011-09-14
      • 2014-11-06
      • 2012-11-18
      • 1970-01-01
      相关资源
      最近更新 更多