通过ant任务配置worklight数据库时缺少ant属性

时间:2015-07-15 04:51:16

标签: ant gradle ibm-mobilefirst

我正在将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。

$ > gradle install

第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 任何人都可以给我一些建议来帮助我搞清楚吗? 谢谢〜

1 个答案:

答案 0 :(得分:1)

我会在这里使用大量猜测,但根据this section of the Ant Manualant.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安装的实际路径。