2017-10-22 14 views
0

この問題は解決されていますが、私の問題を解決する答えはありません。また、私はこれで新しいです。 私は NoClassDefFoundErrorが入手できますか:ORG/apacheの/コモン/ lang3 /のStringUtilsivy eclipse NoClassDefFoundError:org/apache/commons/lang3/StringUtils

私はそれが依存関係を解決しますが、私は、コンパイル後にjarファイルを実行したときに、私はクラスが見つからない見ることができます。

は、ここに私のivy.xmlファイル

<configurations> 
     <conf name="runtime" description="Runtime"/> 
</configurations> 

<dependencies> 
    <dependency org="org.apache.commons" name="commons-lang3" rev="3.6" conf="runtime->default"/> 
    <dependency org="junit" name="junit" rev="4.12" conf="runtime->default"/> 
</dependencies> 

であり、次は私のbuild.xml

<project name="HelloWorld-build" basedir="." default="clean-deploy" xmlns:ivy="antlib:org.apache.ivy.ant"> 
    <property name="src.dir" location="src" /> 
    <property name="build.dir" location="build" /> 
    <property name="dist.dir" location="dist" /> 

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

    <target name="init" description="resolve dependencies with ivy"> 
     <ivy:resolve /> 
     <ivy:cachepath pathid="default.classpath" conf="runtime" /> 
    </target> 

    <target name="compile" depends="init"> 
     <mkdir dir="${build.dir}/classes" /> 
     <javac srcdir="${src.dir}" destdir="${build.dir}/classes" includeantruntime="false"> 
      <classpath refid="default.classpath" /> 
     </javac> 
    </target> 

    <target name="package" depends="compile"> 
     <mkdir dir="${dist.dir}" /> 
     <jar destfile="${dist.dir}/HelloWorld.jar" basedir="${build.dir}/classes"> 
      <manifest> 
       <attribute name="Main-Class" value="mypackage.HelloWorld" /> 
      </manifest> 
     </jar> 
    </target> 

    <target name="deploy" depends="package"> 
     <java jar="${dist.dir}/HelloWorld.jar" fork="true"> 
     </java> 
    </target> 
</project> 

私はターゲットを展開実行すると、私は問題を抱えています。 Javaアプリケーションを手動で(build.xmlを使用せずに)実行すると、正常に動作します。 この問題を解決するのを手伝ってください。コモンズ-lang3は、ランタイムクラスパスに使用できないよう

そして、これがJavaファイルである

import org.apache.commons.lang3.StringUtils; 

public class HelloWorld { 
    public static void main(String[] args) { 
     String message = "Hello world!"; 
     if (!StringUtils.isEmpty(message)) { 
      System.out.println(message); 
     } 
    } 
} 

答えて

0

がNoClassDefFoundエラーがスローされます。コンパイル段階でのみ利用可能であることを意味するクラスパスとしてjavacでのみ指定しました。

これはあなたのjarと一緒にパッケージ化されていない外部jarですので、ランタイムclaspathで利用できるようにする必要があります。しかし、jar属性を使用すると、すべてのクラスパス設定はAntによって無視されます。これを解決するには

は、あなたは以下のようにあなたのdeployターゲットを変更することができます

<target name="deploy" depends="package"> 
    <java classname="mypackage.HelloWorld" fork="true"> 
     <classpath> 
      <path refid="default.classpath"/> 
      <path location="${dist.dir}/HelloWorld.jar"/> 
     </classpath> 
    </java> 
</target>