2016-05-24 5 views
1

投稿Gradle multiple jars from single source folderは複数のファイル.jarを生成する方法について説明しています。しかし、マルチプロジェクトビルドの他のサブプロジェクトにあるファイル.jarにどうやって依存することができますか?例えば異なるサブプロジェクトのカスタムjarファイルを参照してください

、私はこのようなプロジェクト構造があるとします。

./ 
├── build.gradle 
├── settings.gradle 
├── foo/ 
│ ├── src/ 
│ │ ├── main/java/ 
│ │ └── plugins/java/ 
│ └── build.gradle 
└── bar/ 
    ├── src/main/java/ 
    └── build.gradle 

foo/build.gradleは、このタスクで余分.jarを構築します:

sourceSets { 
    plugins 
} 
task pluginsJar(type: Jar) { 
    from sourceSets.plugins.output 
} 

私はbarplugins.jarに依存するためにbar/build.gradleに何を置くことができます?

dependencies { 
    runtime project(':foo:plugins') 
} 

しかし、Gradleのは言う:私はこれをやってみましたパスを持つ

プロジェクト ':FOO:プラグインは' プロジェクトでは見つかりませんでした ':バー'

答えて

1

あなたはしないでくださいそれらを依存関係として持つためのjarファイルとして公開する必要があります。 fooの依存関係をbarにするためには、これがすべて必要です。いくつかの方法は、必要な構成に応じて以下にリストされています。例の下の私のリンクを見てください。

// Compiles for test only 
dependencies { 
    testCompile project(':foo') 
} 

// To have the dependency compiled in the project, if you make a stand alow jar then you will need to zip the files in the "Jar" task. 
dependencies { 
    compile project(':foo') 
} 

dependencies { 
    runtime project(':foo') 
} 

// 2.13 gradle only - Allow to compile the project and load the jar from a source and add it to the classpath while the application is running 
dependencies { 
    compileOnly project(':foo') 
} 

Chapter 23. Dependency Management

EDIT:最も効果の方法は、マルチモジュールの機能を内蔵しgradlesを使用しています。メインプロジェクト内のユニットとして各プラグインを管理し、各プラグインjarをバルク操作として、または他のプラグインやメインアプリケーションに影響を与えない特定のパラメータで公開することができます。あなたがこれを確立したら、基本プロジェクトのjarタスクを呼び出すことができ、すべての科目が構築されます。プラグインは、アプリケーションの起動時または実行中に動的にロードできます。ここで

Chapter 24. Multi-project Builds

2つの例を示します。

RootModule/ 
    build.gradle 
    settings.gradle 
    ApplicationModule/ 
    build.gradle 
    Plugin1Module/ 
    build.gradle 
    Plugin2Module/ 
    build.gradle 
    Plugin3Module/ 
    build.gradle 

または

Project 1 main application: 
    ApplicationModule/ 
     build.gradle 
     settings.gradle 

    Project 2 plugins: (dependency on 1 API jar) 
    RootModule/ 
     build.gradle 
     settings.gradle 
     Plugin1Module/ 
     build.gradle 
     Plugin2Module/ 
     build.gradle 
     Plugin3Module/ 
     build.gradle  
     Plugin4Module/ 
     build.gradle 
     Plugin5Module/ 
     build.gradle 
     Plugin6Module/ 
     build.gradle 
+0

OK、しかし 'server'のソースは' main'ソースセット(これを示すために更新質問)の一部ではないと仮定します。私が 'project( ':foo')'に依存している場合、 'main'ソースセットだけが含まれます。どのように 'server'にも依存できますか? – z0r

+0

なぜあなたはそれをこのように構成しますか?私はちょうどあなたの構造を見直しました。私はあなたが本当に全体的に達成しようとしているものを見てみることを求めています。また、サーバが個別のモジュールとして設定ファイルに設定されていない限り、 ':foo:server'を通してサーバにアクセスすることはできません。 – Underbalanced

+0

私の[実際のプロジェクト](https://github.com/vpac-innovations/rsa/tree/a4bd29ba7904a42d5d24f6eb3106fb68c8cb9711/src/rsaquery)は画像処理システムです。 'main'ソースセットには画像処理システムが含まれています。それから私は一連のプラグイン(画像処理操作)を提供する 'filter'ソースセットを持っています。私はそれらを別々のプラグインに置き換えることができることを明確にするためにそれらを分離しておきたい。私は別のプロジェクトを使うことができると思いますが、それがそれを保証するような気がしません。この種のことをしていない場合のソースセットは何ですか?(正直な質問) – z0r

関連する問題