2017-05-19 3 views
0

Ich versuche, einen String in der Klasse Core.java definiert abzurufen, wie folgt:Flucht Anführungszeichen in ant Datei

So
public static final String PLATFORM_VERSION = "3.0.1_170518"; 

habe ich einen Test ant-Datei erstellt (weil ich es gespeichert werden soll als eine ant-Eigenschaft, die im Kompilierungsvorgang verwendet werden soll).

<?xml version="1.0" encoding="UTF-8"?> 
<project basedir="." default="get-core-version" name="test"> 

<target name="get-core-version"> 
    <exec executable="bash" 
     outputproperty="coreVersionTemp" 
     failonerror="true"> 
     <arg value="-c"/> 
     <arg value="cat ./Core.java | grep VERSION"/> 
    </exec> 
    <echo message="&quot;ResultadoIntermedio&quot;: ${coreVersionTemp}"/> 
    <exec executable="bash" 
     outputproperty="coreVersion" 
     failonerror="true"> 
     <arg value="-c"/> 
     <arg value="echo ${coreVersionTemp} | cut -d'\&quot;' -f2"/> 
    </exec> 
    <echo message="Resultado: ${coreVersion}"/> 
</target>  

Die Ameise Code ist genau dort, wo versagt zu lokalisieren aufgeteilt. Die Ameise kehrt:

Buildfile: E:\git\test.xml 

get-core-version: 
    [echo] "ResultadoIntermedio":  public static final String PLATFORM_VERSION = "3.0.1_170518"; 

BUILD FAILED 
E:\git\test.xml:14: exec returned: 1 

Total time: 0 seconds 

Wie Sie sehen können, wird der Fehler auf ‚Schnitt‘ Befehl. ResultadoIntermedio ist korrekt. Wenn wir die volle Kontrolle über bash ausführen, haben wir das erwartete Ergebnis auch:

$ cat ./Core.java | grep VERSION | cut -d '"' -f2 
3.0.1_170518 

Das Problem ist, glaube ich, in den Escape-Zeichen nach der Option -d Schnitt. Ich habe versucht:

'"' 
'\"' 
\'\"\' 
'&quot;' 
\'&quot;\' 
&apos;&quot;&apos; 

Und einige andere Kombinationen ... wie kann ich dies richtig tun?

Vielen Dank.

Antwort

0

eine Abhilfe Unter Ersetzen ‚"‘to‚:‘. In der Unterkunft mit Javascript funktioniert gut, ist aber ein wenig böse Lösung

<target name="get-core-version"> 
    <exec executable="bash" 
     outputproperty="coreVersionTemp" 
     failonerror="true"> 
     <arg value="-c"/> 
     <arg value="cat ./Core.java | grep VERSION"/> 
    </exec> 
    <echo message="&quot;ResultadoIntermedio&quot;: ${coreVersionTemp}"/> 
    <!-- <propertyregex property="coreVersionTemp2" input="coreVersionTemp" regexp="&quot;" replace=":" global="true"/> --> 
    <script language="javascript"> 
     var temp = project.getProperty("coreVersionTemp"); 
     project.setProperty("coreVersionTemp", temp.replaceAll("\"", ":")); 
    </script> 
    <echo message="&quot;ResultadoIntermedio2&quot;: ${coreVersionTemp}"/> 
    <exec executable="bash" 
     outputproperty="coreVersion" 
     failonerror="true"> 
     <arg value="-c"/> 
     <arg value="echo '${coreVersionTemp}' | cut -d: -f2"/> 
    </exec> 
    <echo message="Resultado: ${coreVersion}"/> 
</target>  
</project>