我正在将worklight 6.1正式部署ant任务集成到gradle构建脚本中。 我们将利用以下脚本来运行灵活的持续集成过程。
def antTaskLibClasspath = "ant-task-lib/worklight-ant-deployer.jar"
def verifyDatabaseArguments(String database){
switch(project.ext[database + 'Type']){
case 'derby':
def dbNameProp = database + 'Name'
def dbDirPathProp = database + 'Dir'
def dbProperties = ['databaseName':project.ext[dbNameProp], 'databaseDir':project.ext[dbDirPathProp] ]
.each { key, value ->
if(!value?.trim()){
def errMsg = "Missing mandatory parameter : ${key}"
println errMsg
throw new StopExecutionException(errMsg)
}
}
project.ext[dbDirPathProp] = Eval.me(""" "${project.ext[dbDirPathProp]}" """).replace("\\", "/")
def dbFile = file(project.ext[dbDirPathProp] + "/${project.ext[dbNameProp]}")
if(!dbFile.exists()){
if(dbFile.mkdirs()){
println "Create folders ${project.ext[dbDirPathProp]} for ${database} derby database"
}else {
def errMsg = "Can not create folders for ${database} derby database"
println errMsg
throw new StopExecutionException(errMsg)
}
}
break
case 'oracle':
break
default:
errMsg = "Unsupported database type"
println errMsg
throw new StopExecutionException(errMsg)
break
}
}
verifyDatabaseArguments("worklightDatabase")
verifyDatabaseArguments("worklightReportsDatabase")
task configure {
description "Configure database for worklight server"
doLast {
ant.typedef(name:'configureDatabase',
classname:'com.ibm.worklight.config.ant.database.ConfigureDatabaseTask',
classpath:antTaskLibClasspath
)
ant.configureDatabase(kind: "Worklight"){
switch(worklightDatabaseType){
case 'derby':
derby(database:worklightDatabaseName, datadir:worklightDatabaseDir)
break
}
}
ant.configureDatabase(kind: "WorklightReports"){
switch(worklightReportsDatabaseType){
case 'derby':
derby(database:worklightReportsDatabaseName, datadir:worklightReportsDatabaseDir)
break
}
}
}
}
这些是脚本开销中引用的属性。我已将它们设置在build.gradle所在的gradle.properties中。
worklightDatabaseType=derby
# derby database name
worklightDatabaseName=WRKLGHT
# derby database file directory
worklightDatabaseDir=${System.properties['user.home']}/.derby/ibm
worklightReportsDatabaseType=derby
# derby database name
worklightReportsDatabaseName=WLREPORT
# derby database file directory
worklightReportsDatabaseDir=${System.properties['user.home']}/.derby/ibm
命令行显示ant错误消息,在尝试使用命令$>配置数据库后,我无法弄清楚出现了什么问题。 gradle configure。
第75行是我开始第一次调用ant.configureDatabase(...
的地方我是否错过了工作灯6.1中未记录的任何强制配置?
我的jdk版本是jdk7_60,没有包装的gradle版本2.4。 任何建议/评论表示赞赏,谢谢〜
顺便说一下,如果IBM mobilefirst团队的任何顾问正在观看,
请考虑让您的产品团队重命名具有破折号的ant任务名称。
看来Groovy AntBuilder无法加载ant元素名称包括破折号,
所以我们必须解压工作灯ant任务jar档案并在defaults.properties中搜索我们需要的任务类,
然后在gradle脚本中手动使用类名重新定义ant任务。那不方便
工作灯项目的构建进度很复杂。我们不想使用ant来设置构建自动化。
彼得发表他的建议后附上:
谢谢你,彼得。 采用自己的方式后,我已经跨过了蚂蚁库问题。 但它再次陷入困境,我无法解释错误信息。
首先我假设这个问题是因为worklight 6.1 ant部署任务可能与gradle不兼容,
所以我在下面编写了ant build脚本来测试我的假设是否正确,
它实现了与之前的gradle脚本相同的构建逻辑和变量。
的build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="install">
<loadproperties srcfile="build.properties" />
<taskdef resource="com/worklight/ant/defaults.properties">
<classpath>
<pathelement location="worklight-ant-task-libs/worklight-ant-deployer.jar"/>
</classpath>
</taskdef>
<target name="configure">
<configuredatabase kind="Worklight">
<derby database="${worklightDatabaseName}" datadir="${worklightDatabaseDir}"/>
</configuredatabase>
<configuredatabase kind="WorklightReports">
<derby database="${worklightReportsDatabaseName}" datadir="${worklightReportsDatabaseDir}"/>
</configuredatabase>
</target>
</project>
build.properties
# derby database name
worklightDatabaseName=WRKLGHT
# derby database file directory
worklightDatabaseDir=${user.home}/.derby/ibm
# derby database name
worklightReportsDatabaseName=WLREPORT
# derby database file directory
worklightReportsDatabaseDir=${user.home}/.derby/ibm
我的构建进度再次失败。
我已将ant错误消息日志文件上传到google drive
任何人都可以给我一些建议来帮助我搞清楚吗?
谢谢〜
答案 0 :(得分:1)
我会在这里使用大量猜测,但根据this section of the Ant Manual,ant.library.dir
仅由Ant的Launcher
类设置,Gradle&# 39; s Ant集成可能无法使用。
我怀疑您正在使用的Worklight Ant任务假定该属性已设置并引发异常。您可以通过运行
来检查 gradle --stacktrace configure
假设configure
是您要运行的任务。这将显示抛出异常的位置(以及任何原因)。
您可能最好将解压缩的Ant分发添加到源树(或者可能只是其lib
目录),并将以下条目添加到项目根目录中的gradle.properties
文件中: / p>
systemProp.ant.library.dir=<path to Ant>/lib
当然,您应该将<path to Ant>
替换为Ant安装的实际路径。