在 Gradle 任务/Groovy 函数中访问 Ant 属性?
Accessing Ant properties in Gradle Task / Groovy function?
我正在尝试在 gradle 函数中使用 ant.uptodate 函数,以检查某些文件是否已更改。
task generateXMLBeans {
ant.uptodate(property: "xsdFileChanges", targetfile: "lib/xmlBeans.jar") {
srcfiles(dir: 'protocol') {
include(name: '*.xsd')
}
}
if(ant.properties.xsdFileChanges == "false") {
ant.taskdef(name: 'xmlbean', classname: 'org.apache.xmlbeans.impl.tool.XMLBean',
classpath: configurations.xmlbeans.asPath)
ant.xmlbean(
javasource: "1.5",
failonerror: "true",
fork: "yes",
memoryMaximumSize: "512M",
memoryInitialSize: "64M",
destfile: "lib/xmlBeans.jar",
classpath: configurations.xmlbeans.asPath){
fileset(dir: 'protocol') {
include(name: '*.xsdconfig')
include(name: 'hmiprotocol.xsd')
}
}
}
}
但是变量ant.properties.xsdFileChanges
是null
.
我试着把ant.uptodate
函数放在一个单独的函数里,结果一样。
当我用 --debug
函数调用任务时,我可以看到 ant.uptodate 函数正常工作。
14:40:50.947 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:uptodate] hmiprotocol_systemlog.xsd omitted as D:\workspace_201912\ProjectX\lib\xmlBeans.jar is up to date.
14:40:50.948 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:uptodate] hmiprotocol_testdetails.xsd omitted as D:\workspace_201912\ProjectX\lib\xmlBeans.jar is up to date.
有谁知道如何正确访问 ant 属性?
这与在 Gradle 中使用 Ant 无关;这就是 Ant 的 uptodate
属性 的工作原理。如果文件不是最新的,则指定的 属性 不会设置为 false
。它根本没有设置。其他一些 Ant 任务,例如 condition
使用相同的约定。
假设您在同一目录中同时拥有 build.xml 和 build.gradle 文件,您可以使用 Ant 本身尝试一个简单示例:
<target name="default">
<uptodate property="uptodate1" targetfile="build.xml" srcfile="build.gradle" />
<echo>${uptodate1}</echo>
<uptodate property="uptodate2" targetfile="build.gradle" srcfile="build.xml" />
<echo>${uptodate2}</echo>
</target>
输出(根据修改时间可能会反转):
default:
[echo] true
[echo] ${uptodate2}
我正在尝试在 gradle 函数中使用 ant.uptodate 函数,以检查某些文件是否已更改。
task generateXMLBeans {
ant.uptodate(property: "xsdFileChanges", targetfile: "lib/xmlBeans.jar") {
srcfiles(dir: 'protocol') {
include(name: '*.xsd')
}
}
if(ant.properties.xsdFileChanges == "false") {
ant.taskdef(name: 'xmlbean', classname: 'org.apache.xmlbeans.impl.tool.XMLBean',
classpath: configurations.xmlbeans.asPath)
ant.xmlbean(
javasource: "1.5",
failonerror: "true",
fork: "yes",
memoryMaximumSize: "512M",
memoryInitialSize: "64M",
destfile: "lib/xmlBeans.jar",
classpath: configurations.xmlbeans.asPath){
fileset(dir: 'protocol') {
include(name: '*.xsdconfig')
include(name: 'hmiprotocol.xsd')
}
}
}
}
但是变量ant.properties.xsdFileChanges
是null
.
我试着把ant.uptodate
函数放在一个单独的函数里,结果一样。
当我用 --debug
函数调用任务时,我可以看到 ant.uptodate 函数正常工作。
14:40:50.947 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:uptodate] hmiprotocol_systemlog.xsd omitted as D:\workspace_201912\ProjectX\lib\xmlBeans.jar is up to date.
14:40:50.948 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:uptodate] hmiprotocol_testdetails.xsd omitted as D:\workspace_201912\ProjectX\lib\xmlBeans.jar is up to date.
有谁知道如何正确访问 ant 属性?
这与在 Gradle 中使用 Ant 无关;这就是 Ant 的 uptodate
属性 的工作原理。如果文件不是最新的,则指定的 属性 不会设置为 false
。它根本没有设置。其他一些 Ant 任务,例如 condition
使用相同的约定。
假设您在同一目录中同时拥有 build.xml 和 build.gradle 文件,您可以使用 Ant 本身尝试一个简单示例:
<target name="default">
<uptodate property="uptodate1" targetfile="build.xml" srcfile="build.gradle" />
<echo>${uptodate1}</echo>
<uptodate property="uptodate2" targetfile="build.gradle" srcfile="build.xml" />
<echo>${uptodate2}</echo>
</target>
输出(根据修改时间可能会反转):
default:
[echo] true
[echo] ${uptodate2}