2010-01-01 23 views
8

Aşağıdaki antivirüs dosyası Ant'e sahip ve programı çalıştırmak için 'run' hedefini kullanmaya çalışıyorum. Aynı classpathref kullanmaant dosyasıyla ilgili yardım - Java görev için classpath görev

<property name="springjar" location="E:/Tools/spring-30/dist/" /> 
<property name="logjar"  location="E:/Tools/commons-logging-1.1.1/" /> 

<patternset id="jar.files"><include name="**/*.jar"/></patternset> 

<path id="springlearn.classpath"> 
    <fileset dir="${springjar}"><patternset refid="jar.files"/></fileset> 
    <fileset dir="${logjar}"><patternset refid="jar.files"/></fileset> 
</path> 


<target name="run" depends="dist" description="Execute the Java Program"> 
    <java dir ="." fork="true" jar="dist\app.jar" classpathref ="springlearn.classpath"> 
    </java> 
</target> 

, başarıyla kavanoz oluşturmak & derlemek mümkün, ama hedef koşmak kullandığınızda, ben

"ana" nın altında hatayı dizisindeki

java.lang.NoClassDefFoundError: org/springframework/core/io/Resource 
Caused by: java.lang.ClassNotFoundException: org.springframework.core.io.Resource 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:289) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 

İstisna olsun

Herhangi bir yardım büyük beğeni topluyor. Teşekkürler

+0

"Dist" hedefi nerede? – skaffman

cevap

7

İşte benim için iyi çalışan bir genel Ant build.xml. buna da size yardımcı olabilir eğer bakınız:

<?xml version="1.0" encoding="UTF-8"?> 
    <project name="ui" basedir="." default="package"> 

    <property name="version" value="1.6"/> 
    <property name="haltonfailure" value="no"/> 

    <property name="out" value="out"/> 

    <property name="production.src" value="src"/> 
    <property name="production.lib" value="lib"/> 
    <property name="production.resources" value="config"/> 
    <property name="production.classes" value="${out}/production/${ant.project.name}"/> 

    <property name="test.src" value="test"/> 
    <property name="test.lib" value="lib"/> 
    <property name="test.resources" value="config"/> 
    <property name="test.classes" value="${out}/test/${ant.project.name}"/> 

    <property name="exploded" value="out/exploded/${ant.project.name}"/> 
    <property name="exploded.classes" value="${exploded}/WEB-INF/classes"/> 
    <property name="exploded.lib" value="${exploded}/WEB-INF/lib"/> 

    <property name="reports.out" value="${out}/reports"/> 
    <property name="junit.out" value="${reports.out}/junit"/> 
    <property name="testng.out" value="${reports.out}/testng"/> 

    <path id="production.class.path"> 
     <pathelement location="${production.classes}"/> 
     <pathelement location="${production.resources}"/> 
     <fileset dir="${production.lib}"> 
      <include name="**/*.jar"/> 
      <exclude name="**/junit*.jar"/> 
      <exclude name="**/*test*.jar"/> 
     </fileset> 
    </path> 

    <path id="test.class.path"> 
     <path refid="production.class.path"/> 
     <pathelement location="${test.classes}"/> 
     <pathelement location="${test.resources}"/> 
     <fileset dir="${test.lib}"> 
      <include name="**/junit*.jar"/> 
      <include name="**/*test*.jar"/> 
     </fileset> 
    </path> 

    <path id="testng.class.path"> 
     <fileset dir="${test.lib}"> 
      <include name="**/testng*.jar"/> 
     </fileset> 
    </path> 

    <available file="${out}" property="outputExists"/> 

    <target name="clean" description="remove all generated artifacts" if="outputExists"> 
     <delete dir="${out}" includeEmptyDirs="true"/> 
     <delete dir="${reports.out}" includeEmptyDirs="true"/> 
    </target> 

    <target name="create" description="create the output directories" unless="outputExists"> 
     <mkdir dir="${production.classes}"/> 
     <mkdir dir="${test.classes}"/> 
     <mkdir dir="${junit.out}"/> 
     <mkdir dir="${testng.out}"/> 
     <mkdir dir="${exploded.classes}"/> 
     <mkdir dir="${exploded.lib}"/> 
     <mkdir dir="${reports.out}"/> 
    </target> 

    <target name="compile" description="compile all .java source files" depends="create"> 
     <!-- Debug output 
       <property name="production.class.path" refid="production.class.path"/> 
       <echo message="${production.class.path}"/> 
     --> 
     <javac srcdir="src" destdir="${out}/production/${ant.project.name}" debug="on" source="${version}"> 
      <classpath refid="production.class.path"/> 
      <include name="**/*.java"/> 
      <exclude name="**/*Test.java"/> 
     </javac> 
     <javac srcdir="${test.src}" destdir="${out}/test/${ant.project.name}" debug="on" source="${version}"> 
      <classpath refid="test.class.path"/> 
      <include name="**/*Test.java"/> 
     </javac> 
    </target> 

    <target name="junit-test" description="run all junit tests" depends="compile"> 
     <!-- Debug output 
       <property name="test.class.path" refid="test.class.path"/> 
       <echo message="${test.class.path}"/> 
     --> 
     <junit printsummary="yes" haltonfailure="${haltonfailure}"> 
      <classpath refid="test.class.path"/> 
      <formatter type="xml"/> 
      <batchtest fork="yes" todir="${junit.out}"> 
       <fileset dir="${test.src}"> 
        <include name="**/*Test.java"/> 
       </fileset> 
      </batchtest> 
     </junit> 
     <junitreport todir="${junit.out}"> 
      <fileset dir="${junit.out}"> 
       <include name="TEST-*.xml"/> 
      </fileset> 
      <report todir="${junit.out}" format="frames"/> 
     </junitreport> 
    </target> 

    <taskdef resource="testngtasks" classpathref="testng.class.path"/> 
    <target name="testng-test" description="run all testng tests" depends="compile"> 
     <!-- Debug output 
       <property name="test.class.path" refid="test.class.path"/> 
       <echo message="${test.class.path}"/> 
     --> 
     <testng classpathref="test.class.path" outputDir="${testng.out}" haltOnFailure="${haltonfailure}" verbose="2"> 
      <classfileset dir="${out}/test/${ant.project.name}" includes="**/*.class"/> 
     </testng> 
    </target> 

    <target name="exploded" description="create exploded deployment" depends="testng-test"> 
     <copy todir="${exploded.classes}"> 
      <fileset dir="${production.classes}"/> 
     </copy> 
     <copy todir="${exploded.lib}"> 
      <fileset dir="${production.lib}"/> 
     </copy> 
    </target> 

    <target name="package" description="create package file" depends="exploded"> 
     <jar destfile="${out}/${ant.project.name}.jar" basedir="${production.classes}" includes="**/*.class"/> 
    </target> 

</project> 
+0

Burada bir java hedefi görmüyorum. Öyleyse bu soruları cevapladığını düşünmüyorum. – Jimmy

+0

Bu, sınıf yolunu Ant'e doğru şekilde nasıl ayarlayacağını gösterir. OP'nin neredeyse altı yıl önce bu soruyu ilk sorduğunda kullanabileceği bir örnek olarak tasarlandı. Bunun gibi yorumlardan zamanınız için daha iyi bir kullanım bulun. – duffymo

9

java task docs Gönderen:

kavanoz özelliğini kullanmak, tüm sınıf yolu ayarları Sun's specification göre göz ardı edilir.

Kurduğunuz sınıf yoluna hiç bakılmıyor.

Sen Sınıfyoluna dist/app.jar eklemek ve doğrudan ana sınıf diyebiliriz: Eğer kavanozu aramak isterseniz

<java dir ="." fork="true" classname="com.yourdomain.YourMainClass"> 
    <classpath> 
    <path refid="springlearn.classpath" /> 
    <pathelement location="dist\app.jar" /> 
    </classpath> 
</java> 

varsayılırsa, oluştururken manifest'teki sınıf yolu girişi kurmak gerekir . pathconvert görevine bir göz atın, bu yararlı olabilir.

+0

Teşekkür ederiz! Ben tomcat ile ant ve tomcat's bootstrap.jar başlamıyorum onun Manifest-classpath içinde tomcat-juli.jar yok. Bu yüzden farklı bir sınıf yolu kullanmayı denedim. "Jar" ​​attritbute kullanırsanız bu işe yaramaz. Şimdi sınıf ismini çalıştırmak ve kendim için bir classpath sağlamak. Tekrar teşekkürler! – s3b

İlgili konular