如何从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的堆栈跟踪太长了。
答案 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)