2011-08-09 66 views
0

这个构建文件有什么问题。它基本上包括两个jar文件AbsoluteLayout.jar和摆动布局1.0.3.jarjava ant build问题(没有正确设置类路径)

<?xml version="1.0"?> 
    <project> 
    <property name="srcDir" location="src"/> 
    <property name="buildDir" location="build"/> 
    <property name="distDir" location="dist"/> 
    <property name="library" value="lib/"/> 


    <path id="classpath"> 
    <fileset dir="${library}"> 
     <!--<include name="**/*.jar"/>--> 
     <include name="*.jar"/> 
    </fileset> 
    </path> 

    <property name="myclasspath" refid="classpath"/> 
    <!-- Emit the property to the ant console --> 
     <echo message="Classpath = ${myclasspath}"/> 

    <target name="init"> 
    <mkdir dir="${buildDir}"/> 
    <mkdir dir="${distDir}"/> 
    </target> 

    <target name="compile" depends="init"> 
    <javac srcdir="${srcDir}" destdir="${buildDir}" classpathref="classpath"/> 
    </target> 

    <target name="dist" depends="compile"> 
    <jar destfile="${distDir}/pro.jar" basedir="${buildDir}"> 
     <manifest> 
     <attribute name="Built-By" value="${user.name}"/> 
     <attribute name="Main-Class" value="Main.Class"/> 
     </manifest> 
    </jar> 
    <!--<jar destfile="${distDir}/package-src.jar" basedir="${srcDir}"/>--> 

    </target> 

    <target name="clean"> 
    <delete dir="${buildDir}"/> 
    <delete dir="${distDir}"/> 
    </target> 
</project> 

它说BUILD SUCCESSFUL.When我在终端运行Ant文件。但是,当我 运行jar文件它给以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group 
Caused by: java.lang.ClassNotFoundException: org.jdesktop.layout.GroupLayout$Group 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 

为什么它不包括在classpath中两个文件?

+1

我没有看到你告诉它的地方。你已经在清单中放置了“内建”和“主要类”,但是“类路径”又如何呢? –

回答

1

But when I run the jar file it is giving following error:

Exception in thread "main" java.lang.NoClassDefFoundError 

这是一个运行时错误。运行时,jdesktop jar在jar文件的类路径中不可用。

尝试

java -cp .;path_jdesktop.jar; yourclass.jar 

您可以添加的jar文件还的classpath in the manifest file

Class-Path: jar1-name jar2-name directory-name/jar3-name 

因此,像:

<manifest> 
    <attribute name="Built-By" value="${user.name}"/> 
    <attribute name="Main-Class" value="Main.Class"/> 
    <attribute name="Class-Path" value="lib/jdesktop.jar"/> 
    </manifest> 

,当运行jar文件确保有是lib目录和jdesktop.jar在那lib目录。

0

您可以使用路径结构来构建您的类路径。例如,你可以从你的lib目录下读取所有jar文件:

<target name="init-classpath" depends="retrieve"> 
    <path id="lib.classpath"> 
     <fileset dir="${lib}"> 
      <include name="*.jar" /> 
     </fileset> 
    </path> 
</target> 

但classpath中需要用空格分隔的路径列表,所以你需要扁平化的路径结构:

<pathconvert property="mf.classpath" pathsep=" "> 
    <path refid="lib.classpath" /> 
    <flattenmapper /> 
</pathconvert> 

最后把你的MF在的.classpath类路径属性:

<jar destfile="${jars}/${result.name}.${result.ext}"> 
    <manifest> 
     ... 
     <attribute name="Class-Path" value="${mf.classpath}" /> 
    </manifest> 
    ... 
</jar> 

在这种情况下,你需要在同一个目录作为输出的jar部署的jar包。