使用ant构建后,线程主java.lang.noclassdeffounderror中的异常

时间:2015-10-30 11:21:54

标签: java ant

我使用以下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

我有以下一些错误:

  

线程中的异常&#34; main&#34; java.lang.NoClassDefFoundError:   javax / ws / rs / core / MultivaluedMap at   java.lang.Class.getDeclarativeMethods0(Native Method)...

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

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

project.jar

..... myproject(文件夹)

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

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

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

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

  

清单 - 版本:1.0

     

Ant-Version:Apache Ant 1.9.6

     

创建者:1.7.0_79-b14(Oracle Corporation)

     

Main-Class:myproject.Main

任何人都知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

因此,您需要向类路径添加所需的库,在本例中为jsr311-api