2010-07-20 5 views
1

필자는 필자의 개미 빌드 파일에서 매우 혼란스러운 반응을 보였습니다. 필자가 충분히 똑똑하지 못하거나 실제로 버그가 있는지 궁금합니다.Ant Fileset 확장 기능이 작동하지 않습니다.

내 프로젝트에 전 세계적으로 설정 한 다음 특성이있어

:

<property name="lib.dir" location="lib"/> 

가 그럼 난 파일 세트를 통해 jar 파일 (둘 이상의 자원)에이 디렉토리에서 일부 파일을 추가 할 수 있습니다를 :

<fileset dir="${basedir}" includes="lib/*filename*"/> 

그런 식으로 일치하는 3 개의 다른 라이브러리가 있어야합니다. 나는 다음을 사용하려고한다면, 그것은 작동하지 않고 어떤 파일은 포함되지 않습니다 : 유일한 차이점은 전역 속성의 사용에 있다고

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/> 

참고. 이제 간단한 질문 : 왜 첫 번째 버전은 광고 된대로 작동 하나 두 번째 버전은 작동하지 않습니까?

+0

'-verbose' 또는'-debug'로 Ant를 실행하고 작업 주위의 출력을 확인하는 것이 좋습니다. Ant는 평가할 때'lib.dir'의 값과 함께 파일 세트에 추가 할 파일을 정확히 알려줍니다. –

+0

-debug를 사용하여 개미를 실행하려고했는데 여기에 관련이있는 행을 찾았습니다. fileset : patternSet을 사용하여 dir [pathToDir]에 스캐너 설치 {excludes : [[pathToDir]/lib/* glpkjni *] excludes : []} 이것은 광고 된대로 작동해야한다고 제안합니다 ... –

답변

2

"파일 세트"표현식을 사용하는 작업 직전과 직후에 "lib.dir"의 실제 값을 확인하십시오. 확실히하기 위해, 당신이 그것을 세계적으로 설정 한 후에 우연히 바뀌지는 않았습니다. <echo/> 작업이 도움이 될 수 있습니다.


어쩌면 해결책이 있습니다. location 속성에 대한 설명은 다음과 같습니다.

속성을 지정된 파일의 절대 파일 이름으로 설정합니다. 이 속성의 값이 절대 경로이면 변경되지 않고 그대로 유지됩니다 (/ 및 \ 문자는 현재 플랫폼 규칙으로 변환 됨). 그렇지 않은 경우 프로젝트 기반의 상대 경로로 간주되어 확장됩니다.

location 대신 value 속성을 사용하십시오.

<project name="test"> 

    <property name="test1" location="lib"></property> 
    <property name="test2" value="lib"></property> 

    <target name="target" description="description"> 
     <echo>${test1}</echo> 
     <echo>${test2}</echo> 
    </target> 

</project> 

은 다음 내 시스템에 출력 될 때 : 다음은 차이 보여줄 수있는 테스트 스크립트의

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml 
target: 
    [echo] D:\Develop\workspace-jabber\scrapbook\lib 
    [echo] lib 
BUILD SUCCESSFUL 
Total time: 307 milliseconds 
+0

jar tast 바로 앞에 다음의 echo 작업을 추가했습니다. 출력이었다 가 [에코] DEBUG : 파일 세트가 포함되어있다 : [pathToDir]/LIB/* glpkjni * 제안한다 , 즉 적어도 상기 특성 평가는 실제로 작동한다. .. –

0

속성을 생성 (?는 글로벌 수행하거나 목표에있다가) 수행하는 디렉토리 lib가 존재합니까? 그렇지 않은 경우 location 속성이 작동하지 않습니다. 대신 value 속성을 사용하거나 디렉토리를 만든 후에 속성을 더 잘 정의하십시오.

+0

lib 디렉토리가 이미 있습니다. –

1

답변에 대한 단서를 찾았지만 아직 모든 것이 아닙니다.

ant -debug와 함께 파일 세트의 두 버전을 모두 실행했습니다.작업에서

, 버전 재산권 사용하지, 나는 다음과 같은 출력을 얻을 다음해야 - 수 - 노동 그러나-나던 버전

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] } 

반면 내가 얻을 :

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

당신이 볼 수 있듯이, 개미 추가 년대 [pathToDir 이렇게

[pathToDir]/[pathToDir]/lib/*filename* 
검색 정규 표현식에서

은 분명히 존재하지 않습니다. 문제 : 지금 제대로 작동하려면 버전을 어떻게 수정해야합니까?

0

전술 한 바와 같이, 문제는 $ {} lib.dir가 너무 따라서 [pathToDir]로/[pathToDir]/LIB/파일명 찾고, 전체 경로를 함유하는 것으로 하였다.

$ {lib.dir} 속성에서 원하지 않는 [pathToDir]을 제거하려면 이제 작업을 사용했습니다. 이제 다음를 얻었으나, 이럴 너무 좋은하지 찾고 해결책 :

<basename property="lib.dir.rel" file="${lib.dir}"/> 
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/> 

PS : 두번째보기에, 나는 Andreas_D도 내가 간과해야합니다 올바른 이성과 좋은 제안 어제를 발견 발견 : -/

관련 문제