1

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

この質問に対する直接の答えはありませんが、解決策はあります。この主題に関するさらなる洞察をいただければ幸いです。


LukeDaleyが提供するgradleビルドスクリプトを使用しました。build.gradleを実行すると、gradleツールAPIに必要な4つのjarファイルが出力されます。次に、これらをGrailslibフォルダーに配置します。

次に、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()
       }
    }
 }

また、build.gradleファイルを使用して「demo」というディレクトリを作成しました。

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 run-app

Grails埋め込みの代わりに、Grailsコントローラーからビルドをトリガーできるようにする方法は、Jenkins(TeamCity、Bamboo、CruiseControlなど)などのRESTをサポートする継続的インテグレーションサーバーを使用することです。これはこの質問に対する直接的な解決策ではありませんが、これらのエンタープライズアプリケーションは、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 に答える