Retrieve value from text file and replace a string

2020-02-16 03:56发布

问题:

I have a file called versionInfo.txt. This file among other things has the following text: "Implementation-Version: 7.5.0.1".

I need to retrieve the version value and copy this version value to a Java file. The Java file will have the following variable:

version = "@version-info@";

I need to replace this @version-info@ with the value I retrieved from the first file. I need to do plug in this code in an existing build.xml file written using ant script.

回答1:

Create a properties file like this and name it build.properties

version.label=7.5.0.1

Then in your build.xml file

<project basedir=".">

    <target name="replace-labels">

        <property file="${basedir}/build.properties"/>

        <replace
            file="${basedir}/myClass.java"
            token="@version-info@"
            value="${version.label}" />

     </target>

</project>

So your file structure should look like

myproject
    build.properties
    build.xml
    myClass.java

Then you can execute your ANT build by changing to the "myproject" directory and executing

ant replace-labels

The replace tag will look for the string "@version-info@" in your myClass.java file and replace it with the value "7.5.0.1"



回答2:

For the second part of your question, retrieve the version info.. : If you need to read the Implementation-Version from the Manifest of a jar you may use a macrodef, f.e. :

<!-- Grep a keyvalue from Manifest -->
<macrodef name="mfgrep">
  <attribute name="jar"/>
  <attribute name="key"/>
  <attribute name="catch"/>
    <sequential>
      <loadproperties>
        <zipentry zipfile="@{jar}" name="META-INF/MANIFEST.MF"/>
      </loadproperties>
        <property name="@{catch}" value="${@{key}}"/>
    </sequential>
</macrodef>

 <mfgrep
   jar="/home/rosebud/temp/ant.jar"
   key="Implementation-Version"
   catch="foobar"
 />

<echo>$${foobar} => ${foobar}</echo>


标签: text ant replace