2011-08-09 13 views
0

このビルドファイルで何が問題ですか?それは基本的に2つのjarファイルにAbsoluteLayout.jarとスイングレイアウト-1.0.3.jarJava antビルドで問題が発生しました(クラスパスを正しく設定していません)

<?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> 

を含めていることは、私はターミナルでantファイルを実行SUCCESSFUL.Whenを構築すると言います。 私はjarファイルを実行したときしかし、それは次のエラーを与えているファイル:

なぜそれがクラスパスに2つのファイルが含まれていない
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) 

+1

私はどこにあなたがそれを話したかわかりません。マニフェストに "built-by"と "main-class"を入れましたが、 "class-path"はどうですか? –

答えて

1

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

Exception in thread "main" java.lang.NoClassDefFoundError 

これは実行時エラーです。 jdesktop jarは、実行中にjarファイルのクラスパスで使用できません。だから、

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ファイルがあることを確認してください動作している間に

あなたはまた、jarファイルのclasspath in the manifest fileを追加することができます

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

を試してみてくださいlibディレクトリであり、のlibディレクトリ。

0

パス構造を使用してクラスパスを構築することができます。

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

をしかし、あなたはあなたのパス構造を平坦化する必要があるので、クラスパスには、スペースで区切られたパスのリストを取ります:たとえば、あなたのlibディレクトリからすべてのjarファイルを読み込むことができ

<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と同じディレクトリに配置する必要があります。

関連する問題