为什么 `gradle` 在每个子项目中执行 `ant.replaceregexp`?
Why `gradle` is executing `ant.replaceregexp` in every subproject?
我有一个 java gradle 项目,结构如下:
EarApp
|
\---> WarA/trunk
| |
| |- build.gradle
| ...<src and config>
|
\---> WarB/trunk
| |
| |- build.gradle
| ...<src and config>
|
\---> WarC/trunk
| |
| |- build.gradle
| ...<src and config>
|
|- build.gradle
|- settings.gradle
我的settings.gradle
是:
include "WarA"
include "WarB"
include "WarC"
project(":WarA").projectDir = file("WarA/trunk")
project(":WarB").projectDir = file("WarB/trunk")
project(":WarC").projectDir = file("WarC/trunk")
子项目中的每个 build.gradle
包含:
import org.tmatesoft.svn.core.wc.*
def getSvnRevision(){
ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
SVNClientManager clientManager = SVNClientManager.newInstance(options);
SVNStatusClient statusClient = clientManager.getStatusClient();
SVNStatus status = statusClient.doStatus(projectDir, false);
SVNRevision revision = status.getRevision();
return revision.getNumber();
}
def replaceTokens() {
ant.replaceregexp(
file: "./src/main/resources/messages/text.properties",
match: "application.revision=(.*)",
replace: "application.revision=rev_" + getSvnRevision(),
byline: "true"
)
}
war {
replaceTokens() // Update rev number
baseName = nome
from('config') {
include 'ibm-web-ext.xml'
into 'WEB-INF'
manifest {
attributes("Application-Name": baseName,
"Implementation-Version": versione + 'rev_' + getSvnRevision())
}
}
}
当执行 gradle -p WarA/trunk war
或 gradle WarA:war
时 WarA.war 构建正确,但我预计 [=33= 仅更新 WarA 的 ./src/main/resources/messages/text.properties
]蚂蚁。
相反,我知道每个子项目都会更新 ./src/main/resources/messages/text.properties
文件。
我错过了什么?
将 replaceTokens()
移动到 doFirst{}
内即可。
war {
doFirst{
replaceTokens() // Update rev number
}
baseName = nome
from('config') {
include 'ibm-web-ext.xml'
into 'WEB-INF'
manifest {
attributes("Application-Name": baseName,
"Implementation-Version": versione + 'rev_' + getSvnRevision())
}
}
}
此处参考:https://discuss.gradle.org/t/what-difference-between-configuration-setting-and-dofirst-dolast/23406
我有一个 java gradle 项目,结构如下:
EarApp
|
\---> WarA/trunk
| |
| |- build.gradle
| ...<src and config>
|
\---> WarB/trunk
| |
| |- build.gradle
| ...<src and config>
|
\---> WarC/trunk
| |
| |- build.gradle
| ...<src and config>
|
|- build.gradle
|- settings.gradle
我的settings.gradle
是:
include "WarA"
include "WarB"
include "WarC"
project(":WarA").projectDir = file("WarA/trunk")
project(":WarB").projectDir = file("WarB/trunk")
project(":WarC").projectDir = file("WarC/trunk")
子项目中的每个 build.gradle
包含:
import org.tmatesoft.svn.core.wc.*
def getSvnRevision(){
ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
SVNClientManager clientManager = SVNClientManager.newInstance(options);
SVNStatusClient statusClient = clientManager.getStatusClient();
SVNStatus status = statusClient.doStatus(projectDir, false);
SVNRevision revision = status.getRevision();
return revision.getNumber();
}
def replaceTokens() {
ant.replaceregexp(
file: "./src/main/resources/messages/text.properties",
match: "application.revision=(.*)",
replace: "application.revision=rev_" + getSvnRevision(),
byline: "true"
)
}
war {
replaceTokens() // Update rev number
baseName = nome
from('config') {
include 'ibm-web-ext.xml'
into 'WEB-INF'
manifest {
attributes("Application-Name": baseName,
"Implementation-Version": versione + 'rev_' + getSvnRevision())
}
}
}
当执行 gradle -p WarA/trunk war
或 gradle WarA:war
时 WarA.war 构建正确,但我预计 [=33= 仅更新 WarA 的 ./src/main/resources/messages/text.properties
]蚂蚁。
相反,我知道每个子项目都会更新 ./src/main/resources/messages/text.properties
文件。
我错过了什么?
将 replaceTokens()
移动到 doFirst{}
内即可。
war {
doFirst{
replaceTokens() // Update rev number
}
baseName = nome
from('config') {
include 'ibm-web-ext.xml'
into 'WEB-INF'
manifest {
attributes("Application-Name": baseName,
"Implementation-Version": versione + 'rev_' + getSvnRevision())
}
}
}
此处参考:https://discuss.gradle.org/t/what-difference-between-configuration-setting-and-dofirst-dolast/23406