2013-11-22 12 views
11

私はGradleの/ IntelliJの-考えとマルチモジュールプロジェクトを開発し、ここに私のプロジェクトの家の構造ですよ:のGradle:複数のJavaプロジェクトのための共通リソース依存

project/ 
    sub-project-1 
    /main/resources 
    sub-project-2 
    /main/resources 
    data 
    /main/resources 
    /test/resources 

あなたが私を見ることができるように複数のサブプロジェクト(すべてJava)を持っていますが、どのように共通のリソース(コードは含まれていませんがリソースのみ)を含むいくつかの共通リソースに依存するようにすることはできますか?

intellij-ideaは自動的にJetGradleでこれらの依存関係を拾うことができます(JetGradleは、各サブプロジェクト内のデフォルトのgradle Javaプロジェクト依存関係をうまく選択します)。

ありがとうございます!

答えて

5

一つの解決策は、dataプロジェクトにも、Javaプラグインを適用し、正規プロジェクトの依存関係(例えばdependencies { runtime project(":data") })を使用することです。しかし、これにはテストリソースの出荷を防ぐための努力が必要です。

もう1つの解決策は、dataをGradleプロジェクトにすることではなく、他の2つのプロジェクト(sourceSets.main.resources.srcDir "../date/main/resources"; sourceSets.test.resources.srcDir "../data/test/resources")に文字通りそのリソースディレクトリを含めることです。

+0

第2の解決策がよりよく聞こえます。ありがとう! –

4

私はそれを理解しました。実際にはかなり簡単です。単に "データ"フォルダを別のプロジェクトとして扱い、従属宣言をサブプロジェクトに追加することはそのトリックを行います。例えば:

dependencies { 
    compile project (':data') 
    testCompile project (':data') 
} 
+2

こんにちはエリック、 私はほとんど同じことをしたいプロジェクト参照を使用することでした。実際に:dataプロジェクトをgradleプロジェクトとして作成しましたか?もしそうなら、あなたのbuild.gradleを共有することができますか? – Dave00Galloway

2

私が取ったアプローチは

sourceSets { 
    main { 
     resources { 
      srcDirs += [ 
       project(':data').sourceSets.main.resources 
      ] 
     } 
    } 
} 
+0

あなたはそういった人生の節約になります。私は時間をかけてファイルを2つのモジュール間でロードすることを試みましたが、重複しないでファイルを作成しましたが、どこに置いても、名前を付けたもの、または実行がモジュールごとに別のgradleモジュール'FileNotFoundException'を取得しました。これで問題は解決しました! – anon58192932

+1

誰かを助けてくれてうれしいです:) –

+0

これを試してみると、スタックオーバーフローが発生します。 org.gradle.api.internal.file.DefaultSourceDirectorySet.doGetSrcDirTreesでorg.gradle.api.internal.file.DefaultSourceDirectorySet.getSrcDirTreesで (DefaultSourceDirectorySet.java:128) 間のバウンス(DefaultSourceDirectorySet.java:141) –

関連する問題