Existe uma maneira simples de pegar o valor de uma propriedade e depois copiá-lo para outra propriedade com certos caracteres substituídos?
Diga propA=This is a value
. Quero substituir todos os espaços em sublinhados, resultando em propB=This_is_a_value
.
defaultValue="${propA}"
é perfeito como uma busca / substituição geral de uma linha: caso contrário, se não houver correspondência, nada é colocado no propB !! Obrigado!Aqui está a solução sem scripts e sem jars externos como o ant-conrib:
O truque é usar os recursos da ANT:
Este substituirá todos os "" em propA por "_" e colocará o resultado em propB. "filetokenizer" trata todo o fluxo de entrada (nossa propriedade) como um token e aplica a substituição da string nele.
Você pode fazer outras transformações sofisticadas usando outros filtros de token: http://ant.apache.org/manual/Types/filterchain.html
fonte
<filetokenizer/>
bit. Seu código funciona bem sem ele (pelo menos no Ant v1.8.3).ant
e não requer bibliotecas adicionais.Se ant-contrib não for uma opção, aqui está uma solução portátil para Java 1.6 e posterior:
fonte
replaceAll
função para strings. Use em seubefore.replace( /\s/g, "_" )
lugar.project.getProperty()
retorna umjava.lang.String
, entãoreplaceAll()
é apropriado neste caso. Se você quiser usarreplace()
, poderá converter 'antes' em uma string JavaScript nativa com:before = new String(before);
project.setNewProperty
seria mais portátil, poissetProperty
poderia substituir o valor da propriedade antiga. Pode até escrever para abefore
propriedade.Caso você queira uma solução que use apenas recursos integrados do Ant , considere o seguinte:
A saída é
${propB} = "This_is_a_value"
fonte
Use algum aplicativo externo como sed:
Se você executar o Windows, procure por "gnuwin32 sed" no Google.
O comando
s/_/./g
substitui todos_
por.
Este script funciona bem no Windows. No Linux, o arg pode precisar ser citado.fonte
Duas possibilidades:
via tarefa de script e mecanismo javascript embutido (se estiver usando jdk> = 1.6)
ou usando Ant addon Flaka
para substituir a propriedade propA existente, basta substituir propB por propA
fonte
Aqui está uma versão mais generalizada da resposta de Uwe Schindler :
Você pode usar um
macrodef
para criar uma tarefa personalizada.você pode usar isso da seguinte maneira:
isso será muito útil se você estiver fazendo isso várias vezes
fonte
Adicionando um exemplo de resposta mais completo sobre uma resposta anterior
fonte
Apenas um FYI para a resposta Substituindo caracteres na propriedade Ant - se você está tentando usar isso dentro de uma execução maven, você não pode referenciar variáveis maven diretamente. Você precisará de algo assim:
fonte
" "
de"_"
?propATemp
substituindo<propertyresource name="propATemp"/>
por<string value="${propA}"/>
As propriedades não podem ser alteradas, mas antContrib vars ( http://ant-contrib.sourceforge.net/tasks/tasks/variable_task.html ) pode.
Aqui está uma macro para localizar / substituir em uma var:
Em seguida, chame a macro como:
O código acima usa javascript split then join, que é mais rápido que regex. As propriedades "locais" são passadas para o JavaScript para que não haja vazamento de propriedade.
fonte
Ou ... Você também pode tentar sua própria tarefa
CÓDIGO JAVA:
ANT SCRIPT
CONSOLE:
fonte