Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant Gradle:通过从属性文件中查找令牌来替换令牌_Ant_Build_Gradle - Fatal编程技术网

Ant Gradle:通过从属性文件中查找令牌来替换令牌

Ant Gradle:通过从属性文件中查找令牌来替换令牌,ant,build,gradle,Ant,Build,Gradle,目前我了解到,我们可以使用org.apache.tools.ant.filters.ReplaceTokens以以下方式在构建期间替换文件的内容 myBeans.xml: <bean id="mybean1" class="com.test.MyClass1" > <property name="myprop1" value="@myproperty@" /> </bean> 渐变文件: from file("myBeans.xml"), {

目前我了解到,我们可以使用
org.apache.tools.ant.filters.ReplaceTokens
以以下方式在构建期间替换文件的内容

myBeans.xml

<bean id="mybean1" class="com.test.MyClass1" >
    <property name="myprop1" value="@myproperty@" />
</bean>
渐变文件:

from file("myBeans.xml"), {
   filter(ReplaceTokens, tokens: ["myproperty": project.properties["myprop"]])
}

但是,我希望gradle从
my.properties
文件中查找属性名称,并将其替换到xml文件中(在筛选器中不提及
myprop
)。如果没有,我将不得不手动添加所有的
占位符。

您可以将属性作为映射传递到ReplaceTokens配置。密钥必须与要替换的令牌匹配。例如:

beans.xml:

<bean id="mybean1" class="com.test.MyClass1" >
    <property name="myprop1" value="@myproperty@" />
</bean>
build.gradle:

task myCopy(type:Copy){
    from "bean.xml"
    into ("$buildDir/beans")
    def myProps = new Properties()
    file("my.properties").withInputStream{
        myProps.load(it);   
    }
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: myProps)
}
希望这有帮助

干杯,
勒内

现场!!非常感谢。
import org.apache.tools.ant.filters.ReplaceTokens
是我的解决方案,谢谢!使用这种方法,如果我们需要替换现有的build.xml本身,它将清空文件。有什么方法可以恰当地实现它吗?使用into(到另一个文件夹),它正在正确复制替换的内容。关键是将参数名称指定为
tokens
filter
任务的实际签名是
filter(映射属性,类
myproperty=testme
task myCopy(type:Copy){
    from "bean.xml"
    into ("$buildDir/beans")
    def myProps = new Properties()
    file("my.properties").withInputStream{
        myProps.load(it);   
    }
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: myProps)
}