2009-03-25 9 views
8

자바 프로젝트를위한 표준 프로젝트 레이아웃이 있습니다 :아파치 개미 매니페스트 클래스 경로?

project/
    src/
     source_file_1.java 
     ... 
     source_file_N.java 
    build/
      classes/
       source_file_X.class 
       ... 
      jar/
       MyJar.jar 
    lib/
      SomeLibrary.jar 
      SomeOtherLibrary.jar 

제가 말할 수있는 한, Ant로 프로젝트를 올바르게 구축하고 있습니다. 내 클래스가 필요한 라이브러리를 사용할 수 있도록 Manifest 파일에 class-path 속성을 설정해야합니다.

다음의 관련 정보는 build.xml에서 얻을 수 있습니다.

<target name="compile" depends="init"> 
    <javac srcdir="src" destdir="build\classes"> 
     <classpath id="classpath"> 
      <fileset dir="lib"> 
       <include name="**/*.jar" /> 
      </fileset> 
     </classpath> 
    </javac> 
</target> 

<target name="jar" depends="compile"> 
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" > 
     <manifest> 
      <attribute name="Built-By" value="${user.name}" /> 
     </manifest> 
    </jar> 
</target> 

올바른 방향으로 밀었을 때 감사드립니다. 고맙습니다

답변

8

내 넷빈즈 생성 빌드 파일을 보면, 나는 -do-jar-with-libraries 작업이 조각을 발견 : 당신은 그냥 매니페스트 작업에 다른 속성을 추가 할 필요가 같은 즉 그래서

<manifest> 
    <attribute name="Main-Class" value="${main.class}"/> 
    <attribute name="Class-Path" value="${jar.classpath}"/> 
</manifest> 

, 그것은 보이는 넌 이미 가지고있다.

Manifest Task documentation도 참조하십시오. jar 파일을 실행에 컴파일에서 위치를 변경하지 않는 라이브러리를 가정

+0

나는 jar.classpath를 모르고 있었지만 대답하기 전에 스스로 결론을 내 렸습니다. 앤트 문서 http://ant.apache.org/manual/CoreTasks/manifestclasspath.html –

+0

오케이와 감사 –

+0

jar.classpath가 빌드 파일의 다른 곳에서 NetBeans에 의해 정의 된 경우 믿다. –

37

, 당신과 같이 컴파일 대상 이외의 클래스 패스 경로 요소를 만들 수 있습니다

<path id="compile.classpath"> 
    <fileset dir="lib" includes="**/*.jar"/> 
</path> 

는 그런 다음 생성 된 경로를 사용할 수 있습니다 현재 클래스 경로 대신 javac 작업 내부.

<classpath refid="compile.classpath"/> 

그런 다음 경로를 사용하여 매니페스트 클래스 경로를 설정할 수 있습니다.

<target name="jar" depends="compile"> 
    <manifestclasspath property="jar.classpath" jarfile="build\jar\MyJar.jar"> 
     <classpath refid="compile.classpath"/> 
    </manifestclasspath>  
    <jar destfile="build\jar\MyJar.jar" basedir="build\classes" > 
     <manifest> 
      <attribute name="Built-By" value="${user.name}" /> 
      <attribute name="Class-Path" value="${jar.classpath}"/> 
     </manifest> 
    </jar> 
</target> 

는 manifestclasspath 72 개 문자 후 포장해야 매니페스트 파일에서 사용하기에 올바른 형식의 클래스 경로를 생성합니다. 많은 jar 파일 또는 긴 경로를 포함하는 긴 클래스 경로는 manifestclasspath 태스크를 사용하지 않으면 올바르게 작동하지 않을 수 있습니다.

+0

또한 flatten과 함께 : http://stackoverflow.com/questions/858766/generate-manifest-class-path-from-classpath-inant – Vadzim