如何从Grails控制器触发gradle构建?

时间:2012-06-10 19:35:36

标签: grails service build controller gradle

如何从Grails控制器构建外部Gradle项目? Grails 2.0.0

更新: 我通过电子邮件向Adam Murdoch(gradle的联合创始人)发送了关于这个问题的电子邮件:http://forums.gradle.org/gradle/topics/how_can_i_use_the_gradle_tooling_api_from_a_grails_controller

虽然我没有直接回答这个问题,但我确实有一个解决方案。 任何关于这个主题的进一步见解将不胜感激。


我使用了Luke Daley提供的gradle构建脚本。 Ran build.gradle,它输出gradle工具api所需的4个jar文件。然后我把它们放到我的Grails lib文件夹中。

然后我将以下代码写入我的grails控制器,名为consoleController.groovy。

import org.gradle.tooling.BuildLauncher
import org.gradle.tooling.GradleConnector
import org.gradle.tooling.ProjectConnection

class consoleController {
   def run = {
       println "new run -------------------------------------"
       println "Building file..."

       String projectDir = "C:\\Documents and Settings\\Administrator\\Desktop\\demo"
       GradleConnector connector = GradleConnector.newConnector()
       connector.forProjectDirectory(new File(projectDir))

       ProjectConnection connection = connector.connect()
       try {
           BuildLauncher launcher = connection.newBuild()
           launcher.forTasks("hello")
           launcher.run()
       } finally {
           connection.close()
       }
    }
 }

我还创建了一个名为“demo”的目录 - 带有build.gradle文件。

task hello {
    println "hello world"
}

我得到以下堆栈跟踪 - 错误: 请看 - http://forums.gradle.org/gradle/topics/how_can_i_use_the_gradle_tooling_api_from_a_grails_controller

StackOverflow.com的堆栈跟踪太长了。

2 个答案:

答案 0 :(得分:3)

您可以访问名为http://forums.gradle.org/gradle/topics/how_can_i_use_the_gradle_tooling_api_from_a_grails_controller的帖子 它提供了设置用于嵌入grails工具API的最小grails项目的指导,并允许用户从grails控制器触发构建。

Grails 2.0.0应该完全支持开箱即用的Gradle工具API,但Spring Loaded一种支持热重新加载类的技术会妨碍gradle工具API,并抛出一个错误: java.lang.ClassNotFoundException:com.springsource.loaded.ri.ReflectiveInterceptor - 试图建立时。

使用-noreloading标志运行grails应用程序,解决了问题。

<强>&GT; grails -noreloading run-app

Grails嵌入的替代方案仍然允许从Grails控制器触发构建,这将是使用支持REST的持续集成服务器,例如Jenkins(TeamCity,Bamboo,CruiseControl等);虽然这不是这个问题的直接解决方案,但这些企业应用程序提供了Gradle嵌入的替代方案,可能更适合企业产品。

干杯,TFM

答案 1 :(得分:1)