2011-07-07 24 views
4

私はマルチプロジェクトのgrailsアプリケーションのためのgradleビルドスクリプトを設定しようとしています。 私はgrails-gradle pluginを使用し、それを稼働させて新しいアプリケーションを作成しました。Gradleを使用してマルチプロジェクトGrailsをセットアップする方法は?

しかし、既存のgrailsマルチプロジェクトアプリケーションをgradleに変換するときに問題があります。

次のように私は私のsettings.gradleファイル内のすべてのサブプロジェクトを宣言している:

 
include 'core', 

     //Plugins 
     'plugin1', 
     'plugin2' 

と、自分のbuild.gradleファイルにその依存関係を設定し、各サブプロジェクトのために。例えば私は Gradleのテストコマンドを実行しようとすると、

 
dependencies { 
    compile project(':plugin2') 
} 

はしかし、私は次のエラーを得た:

UNRESOLVED私はplugin1のbuild.gradleファイルに次のように宣言しているよう plugin1はplugin2でに依存していますDEPENDENCIES

何が問題になりましたか:
タスク ':plugin1:test'の実行に失敗しました。
原因:構成 ':plugin1:runtime'のすべての依存関係を解決できませんでした:
- 未解決の依存関係:{}#plugin2; 1.5-SNAPSHOT:{}#plugin2; 1.5-SNAPSHOT: 'default'に構成が見つかりません。 {}#plugin1; 1.5-SNAPSHOTコンパイル

私の質問は、どのようにしてgradleでサブプロジェクトの依存関係を設定するのですか?

各サブプロジェクトで BuildConfig.groovyとインラインで宣言しましたが、それらをgradleでも宣言する必要がありますか?

+0

'grails'プラグインは、メインビルドファイルの 'subprojects'クロージャを通じてサブプロジェクトに追加されます。 Stacktraceはこちらからご覧いただけます。[Stacktrace](http://pastie.org/2196693) –

答えて

3

私は自分の質問に答えると、それを達成することができます。

マルチプロジェクトのgrailsアプリケーション(別のフォルダにあるいくつかのgrails-pluginsに依存するメインアプリケーション)のビルドオーダーを設定したかったのです。

私はそれぞれのサブプロジェクトビルドファイルでdependsOn()と宣言しました。

例: 私の主なアプリケーションは、pluginAとpluginBに依存しています。

dependsOnChildren() 

を、私のルートsettings.gradleに私が宣言:pluginBで

include "pluginA","pluginB","pluginC" 

:PluginBは私が宣言私のルートbuild.gradleでPluginC

に依存しているのbuild.gradleファイルを、私は

を宣言しました
dependsOn(":pluginC") 

それは私の問題を解決しました。しかし、それはまた、各プラグインのテストがコンパイルされたが実行されていないという別の問題をもたらした。

私は、各サブプロジェクトのためにscriptsフォルダ内_Events.groovyファイルを作成し、含まGRAILS-7296

@このためのソリューションを見つけました:

// Override to workaround GRAILS-7296 
org.codehaus.groovy.grails.test.support.GrailsTestTypeSupport.metaClass.getSourceDir = { -> 
    new File(delegate.buildBinding.grailsSettings.testSourceDir, delegate.relativeSourcePath) 
} 

これはすべての私の問題を解決し、私は今multiproject-を持っていますビルドにGradleを使用するgrailsアプリケーションです。

1

それだけ、すなわちcompileruntimetest、通常javaプラグインで追加された構成の一部を追加し、Grailsの-のGradle-プラグインがgroovyまたはjavaプラグインを適用していないことが判明。したがって、プロジェクト間の依存関係で通常使用されるdefault構成はなく、プロジェクトによって生成された成果物を格納する構成もありません(archive)。

このような設定は、現時点ではこのプラグインではサポートされていないようです。 Grailsのプラグインの依存関係は、一般にbuild.gradleで処理されないことにも注意してください。私はそれを修正しようとすることができると思うが、私はあなたのユースケースを完全には理解していないことに気づいた。

私は何を今達成したいことは、メインプロジェクトのためにBuildConfig.groovy

grails.plugin.location.'plugin-tws-communication' = "../plugin-tws-communication" 

を書くことと等価なものであると信じていますが、Grailsの観点から、プラグインとの関係は何ですか?それは次のとおりです。

  • インストール依存
  • (プラグインの定義における dependsOnマップのように)のビルド順序の依存関係(その1つのプラグインが他の1の前に構築する必要がありますか?他の誰が同じ問題を持っている場合はその後、我々は
  • コンパイル依存性が(その1つのプラグインは他のクラスをコンパイルする必要があるタスクdependsOn))
+0

お返事ありがとうございます。 すべてのサブプロジェクトは、メインビルドファイルの 'subproject'クロージャを通してgrailsプラグインを持っています。 stacktraceは次の場所にあります:[stacktrace](http://pastie.org/2196693) –

+0

@Mathias答えの入力を書き直しました –

+0

私の使用例を明確にするために、私はプラグイン(依存関係をコンパイルする)の間にある最後の関係ですが、プラグインの中にはビルドオーダーの依存関係があるものがあります。 –

関連する問題