2010-06-15 7 views
1

ant를 사용하여 Java 클래스에서 실행 가능한 jar 파일을 만들려고합니다. 자바 클래스는 외부 항아리를 사용합니다. Java 프로그램을 실행하는 동안 build.xml을 실행하면 해당 클래스가 예외를 찾을 수 없습니다. 그 컴파일 벌금. 내 소스 코드의Ant를 사용하여 jar 파일 실행

부 :

<path id="project-libpath"> 
    <fileset dir="${lib.dir}"> 
     <include name="*.jar"/> 
    </fileset> 
</path> 

<path id="project-classpath"> 
    <fileset dir="C:/xmldecode/lib"> 
     <include name="*.jar"/> 
    </fileset> 
</path> 

<target name="compile" depends="prepare">    
    <javac srcdir="${src.dir}" destdir="${classes.dir}">  
     <classpath refid="project-classpath"/> 
    </javac> 
</target> 

<target name="jar" depends="compile"> 
    <copy todir="${classes.dir}">  
     <fileset dir="C:/xmldecode/lib"/>  
    </copy> 

    <pathconvert property="mf.classpath" pathsep=";"> 
     <path refid="project-classpath" /> 
     <flattenmapper /> 
    </pathconvert> 

    <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> 
     <manifest> 
      <attribute name="Main-Class" value="${main-class}"/> 
      <attribute name="Class-Path" value="${mf.classpath}"/> 
     </manifest> 
    </jar> 
</target> 


<target name="run" depends="jar"> 
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">  
    </java> 

답변

1

귀하의 문제는 매니페스트 클래스 경로 항목으로 분리되지 않도록하는 ";" 캐릭터. 다음은 더 잘 작동합니다 생각 :

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

내가 새로운 ANT 작업 manifestclasspath을 사용하는 것이 좋습니다 수 있을까? 항아리의 의존성이 lib 디렉토리에있는 경우

<manifestclasspath property="mf.classpath" jarfile="${jar.dir}/${ant.project.name}.jar"> 
    <classpath refid="project-classpath" /> 
</manifestclasspath> 

이 강력한 방법은 예를 들어 항아리의 위치에 상대 경로를 결정합니다

관련 문제