使用ant生成后,主线程java.lang.noclassdeffounderror中出现异常
我使用以下ant脚本构建并部署了一个项目:使用ant生成后,主线程java.lang.noclassdeffounderror中出现异常,java,ant,Java,Ant,我使用以下ant脚本构建并部署了一个项目: <?xm1 vertion="1.0" ?> <project name="my project" default="build" basedir="."> <path id="project-classpath"> <fileset dir="lib" includ
<?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-jarproject.jar
我有以下一些错误:
线程“main”java.lang.NoClassDefFoundError中出现异常:
javax/ws/rs/core/MultivaluedMap at
java.lang.Class.GetDeclarativeMethod0(本机方法)
(如果我使用IDE运行,它可以正常工作。)
在我的project.jar中,我有以下树结构:
project.jar
..…我的项目(文件夹)
主类(文件)
..…META-INF(文件夹)
……MANIFEST.MF(文件)
文件MANIFEST.MF包含以下内容:
清单版本:1.0
Ant版本:ApacheAnt 1.9.6
创建人:1.7.0_79-b14(Oracle公司)
主类:myproject.Main
有人知道我做错了什么吗?运行jar时,需要在类路径中包含一个javax.ws.rsAPIjar库
java -classpath javax.ws.rs-api-2.0.1.jar -jar project.jar
NoClassDefFoundError
表示该类在编译时存在,但在运行时丢失。
换句话说,运行生成的jar时,javax/ws/rs/core/MultivaluedMap
不在类路径中
在IDE中,项目使用的外部库(jar)不包括在生成的jar中
因此,您需要添加到类路径所需的库中,在本例中,
jsr311api
如何查看我正在使用的jsr311的版本?当我看到这个项目时,我看到其中一个lib是javax.ws.rs-api-2.0.1.jar,这和这个lib有关系吗?是的,我想你可以用那个。你在用Eclipse吗?启用“与编辑器链接”功能,找到您在代码中使用的库的方法或类,将光标放在上面,然后按F3:您将在哪个jar中结束?完成后,它会打开jar文件javax.ws.rs-api-2.0.1.jar的一个新选项卡。您是否将javax.ws.rs-api-2.0.1.jar放在project.jar的同一目录中?