Ant 속성에서 문자
속성 값을 가져 오는 특정 문자를 바꾸어 다른 속성에 복사하는 간단한 방법이 있습니까?
말하십시오 propA=This is a value
. 그 안에있는 모든 공백을 밑줄로 바꾸고 싶습니다 propB=This_is_a_value
.
Ant Contrib 에서 propertyregex 를 사용하십시오 .
나는 당신이 원 생각합니다 :
<propertyregex property="propB"
input="${propA}"
regexp=" "
replace="_"
global="true" />
불행히도 주어진 예는 명확하지 않지만 시도해 볼 가치가 있습니다. 밑줄이 순서를 확인해야합니다 defaultValue
. 옵션도 할 수 있습니다.
다음은 스크립팅이없고 ant-conrib와 같은 외부 jar가없는 솔루션입니다.
트릭은 ANT의 리소스를 사용하는 것입니다.
- 소스 파일과 유사하지만 리소스의 고급 값에서 스트림을 제공하는 "propertyresource"라는 리소스 유형이 있습니다. 그래서 당신은 그것을 받아들이고 파일을 받아들이는 "복사"와 같은 모든 작업에서 사용할 수 있습니다.
- 모든 리소스를 속성 (예 : 파일)에로드 할 수있는 "loadresource"작업도 준비이 작업은 속성 리소스도로드 할 수 있습니다. 이 작업을 통해 일부 토큰 변환을 적용하여 입력을 필터링 할 수 있습니다. 마지막으로 다음은 원하는 작업을 수행합니다.
<loadresource property="propB">
<propertyresource name="propA"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<replacestring from=" " to="_"/>
</tokenfilter>
</filterchain>
</loadresource>
이 propA의 모든 ""를 "_"로 대체하고 결과를 propB에 배치합니다. "filetokenizer"는 전체 입력 스트림 (우리 속성)을 하나의 토큰으로 취급하고 그 위에 대체 대체를 적용합니다.
다른 토큰 필터를 사용하여 다른 멋진 변환을 수행 할 수 있습니다. http://ant.apache.org/manual/Types/filterchain.html
ant-contrib이 옵션이 아닌 경우 다음은 Java 1.6 이상을위한 솔루션입니다.
<property name="before" value="This is a value"/>
<script language="javascript">
var before = project.getProperty("before");
project.setProperty("after", before.replaceAll(" ", "_"));
</script>
<echo>after=${after}</echo>
Ant 내장 기능 만 사용하는 솔루션을 원하는 경우 다음을 고려하십시오.
<target name="replace-spaces">
<property name="propA" value="This is a value" />
<echo message="${propA}" file="some.tmp.file" />
<loadfile property="propB" srcFile="some.tmp.file">
<filterchain>
<tokenfilter>
<replaceregex pattern=" " replace="_" flags="g"/>
</tokenfilter>
</filterchain>
</loadfile>
<echo message="$${propB} = "${propB}"" />
</target>
출력은 ${propB} = "This_is_a_value"
sed와 같은 외부 앱을 사용하십시오.
<exec executable="sed" inputstring="${wersja}" outputproperty="wersjaDot">
<arg value="s/_/./g"/>
</exec>
<echo>${wersjaDot}</echo>
Windows를 실행하는 경우 "gnuwin32 sed"를 검색합니다.
이 명령 s/_/./g
은 every _
를 .
다음으로 대체합니다 . 이 펼쳐지는 창에서 잘 작동합니다. 리눅스에서 arg는 인용이 필요합니다.
두 가지 가능성 :
펼쳐 작업 및 내장 자바 펼쳐 엔진을 통해 (jdk> = 1.6을 사용하는 경우)
<project>
<property name="propA" value="This is a value"/>
<script language="javascript">
project.setProperty('propB', project.getProperty('propA').
replace(" ", "_"));
</script>
<echo>$${propB} => ${propB}</echo>
</project>
<project xmlns:fl="antlib:it.haefelinger.flaka">
<property name="propA" value="This is a value"/>
<fl:let> propB := replace('${propA}', '_', ' ')</fl:let>
<echo>$${propB} => ${propB}</echo>
</project>
기존 속성 propA를 사용하려면 propB를 propA로 바꾸면됩니다.
다음은 Uwe Schindler의 답변에 대한 보다 일반적인 버전입니다 .
macrodef
를 사용하여 사용자 지정 작업을 만들 수 있습니다 .
<macrodef name="replaceproperty" taskname="@{taskname}">
<attribute name="src" />
<attribute name="dest" default="" />
<attribute name="replace" default="" />
<attribute name="with" default="" />
<sequential>
<loadresource property="@{dest}">
<propertyresource name="@{src}" />
<filterchain>
<tokenfilter>
<filetokenizer/>
<replacestring from="@{replace}" to="@{with}"/>
</tokenfilter>
</filterchain>
</loadresource>
</sequential>
</macrodef>
다음과 같이 사용할 수 있습니다.
<replaceproperty src="property1" dest="property2" replace=" " with="_"/>
이 작업을 여러 번 수행하는 경우 매우 유용합니다.
이전 답변에 대한 답변 더 완전한 예 추가
<property name="propB_" value="${propA}"/>
<loadresource property="propB">
<propertyresource name="propB_" />
<filterchain>
<tokenfilter>
<replaceregex pattern="\." replace="/" flags="g"/>
</tokenfilter>
</filterchain>
</loadresource>
대답에 대한 FYI 는 Ant 속성의 문자 바꾸기 -Maven 실행 내에서 이것을 사용하려는 경우 maven 변수를 직접 참조 할 수 없습니다. 다음과 같은 것이 필요합니다.
...
<target>
<property name="propATemp" value="${propA}"/>
<loadresource property="propB">
<propertyresource name="propATemp" />
...
또는 ... 자신의 작업 을 시도 할 수도 있습니다.
자바 코드 :
class CustomString extends Task{
private String type, string, before, after, returnValue;
public void execute() {
if (getType().equals("replace")) {
replace(getString(), getBefore(), getAfter());
}
}
private void replace(String str, String a, String b){
String results = str.replace(a, b);
Project project = getProject();
project.setProperty(getReturnValue(), results);
}
..all getter and setter..
개미 스크립트
...
<project name="ant-test" default="build">
<target name="build" depends="compile, run"/>
<target name="clean">
<delete dir="build" />
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes" includeantruntime="true"/>
</target>
<target name="declare" depends="compile">
<taskdef name="string" classname="CustomString" classpath="build/classes" />
</target>
<!-- Replacing characters in Ant property -->
<target name="run" depends="declare">
<property name="propA" value="This is a value"/>
<echo message="propA=${propA}" />
<string type="replace" string="${propA}" before=" " after="_" returnvalue="propB"/>
<echo message="propB=${propB}" />
</target>
콘솔:
run:
[echo] propA=This is a value
[echo] propB=This_is_a_value
참고 URL : https://stackoverflow.com/questions/1176071/replacing-characters-in-ant-property
'IT' 카테고리의 다른 글
Android Studio는 물리적 장치를 Null로 인식하고 있습니까? (0) | 2020.09.17 |
---|---|
C # .NET 3.5에서 진행률 표시 줄의 색상을 변경하는 방법은 무엇입니까? (0) | 2020.09.17 |
레일에서 단일 테이블을 실현하는 방법은 무엇입니까? (0) | 2020.09.17 |
PHP에서 구성 파일 만들기 (0) | 2020.09.17 |
존재 대 구성 (0) | 2020.09.17 |