2011-05-10 4 views
3

Ant에서 <proguard> 작업을 호출하고 다양한 JAR 파일 경로를 전달해야합니다. 에 해당 :개미 작업에서 경로를 올바르게 인용하는 방법은 무엇입니까?

<proguard> 
    -injars /some/path/jar1;"/some other path/jar2" 
</proguard> 

그것은 작동하지 않습니다

<proguard> 
    -injars /some/path/jar1;/some other path/jar2 
</proguard> 

문제는, 이러한 경로 중 일부는이 같은 proguard manual 설명과 같이 인용해야 공백이나 특수 문자를 포함 할 수있다 전체 인수를 인용하려면 개별 경로를 따로 따로 인용해야합니다. 내가 개조하고있는 개미 파일은 proguard에 다양한 JAR 경로를 전달하기 위해 속성을 사용하며, 문제는 -injars와 -libraryjars에 대한 개별 경로를 올바르게 인용하는 방법입니다. 예 :

<property name="libraryjars" refid="some.classpath" /> 
<proguard> 
    @${proguard.config} 
    -libraryjars ${libraryjars} 
</proguard> 

난 그냥처럼 보이게 속성을 수정 :

<property name="libraryjars.unquoted" refid="some.classpath"/> 
<property name="libraryjars" value="'${libraryjars.unquoted}'"/> 

하지만 그것은 여전히 ​​취성, 안 그래? 더 좋은 방법이 있습니까? 사실 "path1; path2"속성을 가지고 있는데, 경로 구성 요소를 분할하고 따로 따옴표로 묶은 다음 속성을 다시 만들고 싶습니다. 나는 쉘 스크립트에서 그렇게하는 법을 알고 있지만 개미 구문은 훨씬 신비 스럽다. 오 물론, 모든 플랫폼 (적어도 윈도우, 맥, 리눅스는 물론)에서 작동 할 필요가있다. 경로 구분 기호가 바뀌었지만 괜찮 았어. 그 앤트 스크립트에서는 어딘가에 상수가있다. @ 마틴의 답변

[업데이트] 덕분에, 나는 완벽한 방법은 내가 내부 mapper chainpathconvert를 사용하여 원하는 정확히 무엇을 발견 :

<pathconvert property="dest.path" refid="source.path"> 
    <firstmatchmapper> 
    <regexpmapper from='^([^ ]*)(.*)$$' to='"\1\2"'/> 
    <identitymapper/> 
    </firstmatchmapper> 
</pathconvert> 

"C:\path\jar 1";"C:\my path\jar2";C:\path\jar3C:\path\jar 1;C:\my path\jar2;C:\path\jar3 변환합니다. 경로 변환은 각 경로의 매퍼 체인을 호출합니다. regexp가 일치하면 그렇지 않으면 ID가 필요합니다. 정규 표현식은 공간이없는 무언가가 뒤따라 오는 것을 발견하면 큰 따옴표로 묶습니다.

답변

2

하나의 옵션은 'full-XML'프로 가드 작업을 사용하는 것이고 각각의 jar는 별도의 요소가되지만 일반적으로 속성에 대한 경로를 렌더링 할 때는 Ant pathconvert task을 사용합니다. 예를 들어 :

<fileset id="some.classpath" dir="."> 
    ... 
</fileset> 

<pathconvert property="injars.inner" refid="some.classpath" pathsep='"${path.separator}"' /> 
<property name="injars" value='"${injars.inner}"' /> 

참고 선도하고 따옴표를 후행의 추가 - pathsep는 경로의 요소 사이에 적용됩니다. 그런 다음 당신이 언급하는 방식에서 사용 :

<proguard> 
    -injars ${injars} 
</proguard> 
+2

당신은 또한 태그 내부에 필요한 따옴표를 추가 할 수 있습니다 -injars "$ {injars을}"

+0

감사 @martin. 그게 완벽한 포인터 였고 나는''문서를 읽음으로써 해결책을 찾았습니다. – ralfoide

관련 문제