1

如何从 Grails 控制器构建外部 Gradle 项目?圣杯 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 构建脚本。运行 build.gradle,它输出了 gradle tooling api 所需的 4 个 jar 文件。然后我将它们放入我的 Grails lib 文件夹中。

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

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 的堆栈跟踪太长。

4

2 回答 2

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 应用程序可以解决问题。

> grails -noreloading 运行应用程序

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

干杯,TFM

于 2012-06-17T19:24:27.867 回答
1

你会想从阅读开始:

http://gradle.org/docs/current/userguide/embedding.html

这是工具 api 的 java 连接器:

http://gradle.org/docs/current/javadoc/index.html?org/gradle/tooling/GradleConnector.html

于 2012-06-10T22:42:37.197 回答