3

プロジェクト内に次の設定があります...

  • rabbitmq と spring 統合を使用して接続された、SOA スタイル プロジェクト用のマルチ プロジェクト gradle ビルド。
  • サービスを表す多数の grails プロジェクトとプレーンな Java/groovy プロジェクトが含まれています。
  • 各サービス プロジェクトと並んで、Spring 統合を使用してプロキシできるサービスのすべてのパブリック インターフェイス (およびメッセージ) を含むプロジェクト (jar) があります。
  • プロジェクトは gradle の依存関係を使用して相互に関連付けられており、gradle idea プラグインを使用して IntelliJ プロジェクト ファイルを生成します。

私がやりたいことは次のとおりです。

  • インターフェース jar を grails プロジェクトに含めて、Spring 統合を使用して、rabbitmq 経由で呼び出しをサービスにプロキシできるようにします。
  • grails アプリを実行すると、このインターフェイス jar がビルドされ、grails に含まれます。
  • IntelliJ から grails アプリを実行すると、最新バージョンのインターフェイスがコンパイルされ、それらが grails プロジェクトに含まれます。
  • gradle からプロジェクト全体をビルドするとき、gradle にインターフェイス jar を grails アプリに正しく関連付けさせます。
  • 理想的には、gradle 内で依存関係宣言を使用するだけでこれを実行できるようになりたいと思っていますが、これはおそらく夢物語です...

私のオプションは何ですか?

  1. gradle 内の grails ビルド ライフサイクルにタスクを追加して、依存する jar をビルドし、それらを grails lib フォルダーにコピーしますか?
  2. Events.groovy などを使用して grails ビルド ライフサイクルにフックし、grails を呼び出して、依存する jar をビルドおよびパッケージ化します。これは、IntelliJ とコマンド ライン ルートの両方をカバーします。
  3. インターフェイスを grails プラグインとして構築しますか? Grails以外のプロジェクトからも使用する必要があるため、これを割引しました。

ヘルプ/アドバイスをいただければ幸いです。

4

3 に答える 3

2

私がする必要があるのは、以下を追加することだけでした。その後、grailsプラグインが依存関係を処理します...

compile project(':dependent-project')

run-appとwarでうまく機能します...

于 2012-11-15T13:49:38.970 に答える
0

今のところ私の解決策は次のとおりです。

  • grails / gradleプラグインを使用して、grailsプロジェクトをビルドします。
  • このプラグインを使用して、私のgrailsアプリを実行します。gradlegrails-run-app。
  • gradleのgrails-run-appタスク(オンザフライで作成されます)に接続して、依存関係をビルドしてlibディレクトリにコピーするタスクを呼び出します。

これは現時点ではIntelliJの全体的な負荷には役立ちませんが、IntelliJの実行構成としてgradleタスクを実行します。

私のbuild.gradleは次のとおりです(この例では、dependent-projectがjarされ、libに入れられています):

import org.grails.gradle.plugin.GrailsTask

evaluationDependsOn(':dependent-project')

buildscript {
    repositories {
        mavenCentral()
        mavenRepo name: "grails", url: 'http://repo.grails.org/grails/repo'
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:1.1.1-SNAPSHOT"
    }
}

repositories {
    mavenCentral()
    mavenRepo name: "grails", url: 'http://repo.grails.org/grails/repo'
}

ext {
    version = "1.0"
    grailsVersion = "2.2.0.RC2"
    grailsTaskPrefix = "grails-"
}

apply plugin: "grails"

dependencies {
    ['dependencies', 'resources', 'core', 'test', 'hibernate', 'plugin-datasource', 'plugin-domain-class', 'plugin-tomcat', 'plugin-services'].each { plugin ->
        compile "org.grails:grails-$plugin:2.2.0.RC2"
    }
    bootstrap "org.codehaus.groovy:groovy-all:2.0.5"
}

// Get hold of the grails-run-app task (which is created on the fly) and add a dependency to the copyDependencies task
project.gradle.afterProject { p, ex ->
    if (p == project) {
        project.tasks.addRule("Grails dependencies") { String name ->
            if (name.startsWith(grailsTaskPrefix)) {
                tasks.getByName(name).dependsOn(copyDependencies)
            }
        }
    }
}

// Build and copy any dependent jar files...
task copyDependencies(type: Sync) {
    from project(':dependent-project').configurations.archives.allArtifacts.files
    into "$projectDir/lib"
}
于 2012-11-15T11:50:05.873 に答える
0

この問題の部分的な解決策は、Gradle と Grails の両方の maven プラグインを使用することです。Grails プロジェクトの依存関係である jar を構築している同様の状況があります。

私が選択したアプローチはinstall、Java アーティファクトをローカル .m2/repo に入れgrails/conf/BuildConfig.groovy、mavenLocal() リポジトリを使用して依存関係を宣言することです。

私が考えていなかったのは、gradle をイベント ライフサイクルにフックし (興味深いアイデアです)、代わりに grails アプリをラップする (test-app、run-app などを実行する) gradle プロジェクトを定義することでした。私の grails アプリの gradle ラッパーは、他のコンポーネントのタスクに依存しているinstallため、再構築する必要があるかどうかを常にチェックします。

私はEclipseユーザーなので、質問のIntellijの部分についてコメントすることはできませんが、上記は私にとってはうまくいくので、いくつかのアイデアが得られることを願っていますか?

于 2012-11-15T00:48:10.277 に答える