2012-07-18 4 views
1

그래서 두 개의 Java 프로그램에서 클래스 파일을 가져 와서 다른 클래스를 확장하고 두 개의 개별 jar 파일로 패키지 한 다음, 그들을 시작합니다.Ant 빌드 파일에서 Java 프로그램 실행

<java classname="Main"> 
      <classpath> 
        <pathelement location="${mainDir}"/> 
        <pathelement path="${Main-Class}"/> 
      </classpath> 
     </java> 

개미를 호출 할 때마다 "주"를 찾을 수 없다고 표시됩니다. 필요한 경우 build.xml 파일의 나머지 부분을 게시 할 수 있지만 실제로 혼란 스러울 부분입니다. 나는 클래스 이름을 가지고 있다고 확신하지만, 가장 큰 문제는 위치와 경로에 무엇이 들어가는 지 알아내는 것입니다. 지금은 더미 변수 만 있습니다.

편집 : 다음은 전체 파일입니다.

<?xml version="1.0"?> 
<project default="dist" name="webscarab"> 
<description>Class</description> 
<property name="ClassFiles" location="..\Simple\trunk\dev\Class\bin\" /> 
<property name="mainClassFiles" location="..\Simple\trunk\dev\main\build\" /> 
<property name="buildDir" location=".\build" /> 
<property name="distDir" location=".\dist" /> 
<property name="mainDir" location="..\Simple\trunk\dev\webscarab\src\" /> 
<target name="init"> 
     <tstamp/> 
     <mkdir dir="${buildDir}"/> 
     <mkdir dir="${distDir}"/> 
</target> 
<target name="dist" depends="init"> 
    <jar destfile="${distDir}/package${DSTAMP}.jar" basedir="${ ClassFiles}"/> 
    <jar destfile="${distDir}/package-web-${DSTAMP}.jar" basedir="${mainClassFiles}"/> 
    <java classname="Main"> 
    <classpath> 
     <pathelement location="${mainDir}"/> 
     <pathelement path="${Main-Class}"/> 
    </classpath> 
    </java> 
</target> 
</project> 

EDIT 2 : 모든 항목이 이미 컴파일되어 있고 모든 .class 파일이 있어야합니다. 그것은 Ant 파일에서해야 할 일이 아닙니다.

답변

1

"클래스를 찾을 수 없습니다."라는 오류 메시지는 잘못된 클래스 경로로 인해 발생했을 가능성이 큽니다.

클래스 경로는 응용 프로그램에 필요한 모든 클래스 및 리소스 파일에 대한 액세스 권한을 부여해야합니다. 이것은 일련의 디렉토리와 jar 파일로 구성됩니다. location은 단일 디렉토리 또는 경로를 나타내며 path은 플랫폼에 따라 ; 또는 :으로 구분 된 배수를 나타냅니다. 귀하의 경우에는

는, 당신이 중 하나를 jar 파일로 ${pegaFuzzClassFiles}${webScarabClassFiles}, 또는 ${distDir}/package-pega-${DSTAMP}.jar의 디렉토리로 및 ${distDir}/package-web-${DSTAMP}.jar 구성에 클래스 패스를 원하는 날 것으로 보인다. 하나의 <pathelement path="…"/> 요소를 사용하여이 작업을 수행 할 수 있지만이 것이 더 명확하다고 생각하면 복수 <pathelement location="…"/>을 제안 할 것입니다.

응용 프로그램에서 사용하는 타사 라이브러리도 해당 경로에서 사용할 수 있어야합니다. 하나 이상의 <fileset><classpath>에 중첩시킬 수 있으며, 각각은 특정 디렉토리에있는 jar 개의 파일을 모두 설명합니다.

+0

이것은 내가 찾고있는 것입니다. 정말 고마워! – barndog

1

요소를 변경하여 생성중인 Jar를 가리 키도록하십시오. 이제 classpath가 소스를 가리키는 것처럼 보일 것입니다. 클래스 패스에는 컴파일 된 .class 파일이 필요하므로 작동하지 않을 것입니다. 항아리.

스타일의 문제처럼, dist 대상에 의존하는 별도의 '실행'또는 '실행 응용 프로그램'대상으로 작업을 옮깁니다.

+0

그래, 나는 그것을 분리 할 것이다, 나는 단지 이것을 먼저 얻고 싶다. 따라서 위치 아래에 jar 파일이있는 디렉토리를 놓고 경로 아래에 무엇을 넣을까요?또는 나는 여전히 섞여있다. – barndog

+0

와 같은 것이 트릭을 수행해야합니다. – Robert

0

코드를 컴파일하기 위해 Javac 작업이 필요하고 컴파일 된 클래스를 실행할 수 있습니다. javac의 작업 방문 http://ant.apache.org/manual/Tasks/javac.html

에 대한 자세한 내용은 두 번째 조언 : 유닉스의 사용은 슬래시 '/'강력 창 여부에 있든, 좋습니다. mainDir, distDir 및 buildDir 속성 위치를 변경하십시오.

0

나는 개미 경험이별로 없지만, 자바에게 어떤 jar 파일을 실행할 것인지 명시 적으로 말해야 할 수도 있습니다.

<java jar="path-to-jar-file" classname="org.owasp.webscarab.Main">