2015-01-26 82 views
0

我在构建文件build.xml时遇到了一些问题。我知道标记javac的类路径存在一些问题,但我不知道如何解决它。Ant apache NoClassDefFoundError

[java] Exception in thread "main" java.lang.NoClassDefFoundError: javax/ws/rs/core/Response 
[java]  at java.lang.Class.getDeclaredMethods0(Native Method) 
[java]  at java.lang.Class.privateGetDeclaredMethods(Class.java:2521) 
[java]  at java.lang.Class.getMethod0(Class.java:2764) 
[java]  at java.lang.Class.getMethod(Class.java:1653) 
[java]  at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
[java]  at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 
[java] Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.Response 
[java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
[java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
[java]  at java.security.AccessController.doPrivileged(Native Method) 
[java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
[java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
[java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

我的项目库中的 “/的WebContent/WEB-INF/lib中/”,这是我的文件 “的build.xml”:

<property name="src" value="\${basedir}/src" /> 
<property name="build" value="classes" /> 
<property name="dist" value="dist" /> 
<property name="package" value="*" /> 

<target name="init"> 
<echo> Criando os diretorio classes, doc e dist.</echo> 
<mkdir dir="..\${build}" /> 
<mkdir dir="..\${dist}" /> 
</target> 

<target name="compile" depends="init" > 
<echo> Compilando o projeto.</echo> 
<javac srcdir="\${src}" destdir="..\${build}" includeantruntime="false"> 
    <classpath> 
    <fileset dir="\${basedir}/WebContent/WEB-INF/lib/"> 
     <include name="jersey-server-1.4.jar" /> 
    </fileset> 
    </classpath> 
</javac> 
</target> 

<target name="dist" depends="compile"> 
<echo> Gerando o .jar do projeto.</echo>  
<jar jarfile="..\${dist}/InfosoundWebApp.jar" basedir="..\${build}"> 
    <!-- Tornando o jar executável--> 
    <manifest> 
     <attribute name="Main-Class" value="com.informatec.restfull.ServerRestfull"/>    
    </manifest> 
</jar> 
</target> 

<target name="all" depends="dist"> 
<echo> Executa o projeto.</echo> 
<java jar="..\${dist}/InfosoundWebApp.jar" fork="true" /> 
</target> 

<target name="clear"> 
    <delete dir="..\${build}" /> 
    <delete dir="..\${dist}" />  
</target> 

如果有人能帮助我,我将不胜感激。

回答

0

看起来您正试图从JavaSE运行JavaEE应用程序。 javax/ws/rs/core/Response类仅在JavaEE(在您的Web服务器上)下可用。 您的build.xml target =“all”会尝试在JavaSE下执行您的webapp。摆脱它。将target =“dist”作为默认目标,然后将您的jar上传到您的web服务器(Tomat等)。

+0

嗨,tks为答案。你知道我如何构建目标“编译”来导入库? – pedrodurek 2015-01-27 11:12:00

+0

您不应该需要导入库。类路径将允许你的java文件进行编译。然后dist使你的jar,这应该是一个WAR文件。我认为你需要研究如何创建JavaEE包,而不是标准的JAR文件。 WAR文件上传到网络服务器并运行它。你不要从java命令行运行它。 – 2015-01-28 03:28:32