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 chain와 pathconvert를 사용하여 원하는 정확히 무엇을 발견 :
<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\jar3
에
C:\path\jar 1;C:\my path\jar2;C:\path\jar3
변환합니다. 경로 변환은 각 경로의 매퍼 체인을 호출합니다. regexp가 일치하면 그렇지 않으면 ID가 필요합니다. 정규 표현식은 공간이없는 무언가가 뒤따라 오는 것을 발견하면 큰 따옴표로 묶습니다.
당신은 또한 태그 내부에 필요한 따옴표를 추가 할 수 있습니다 -injars "$ {injars을}" –
감사 @martin. 그게 완벽한 포인터 였고 나는''문서를 읽음으로써 해결책을 찾았습니다. –
ralfoide