2013-11-22 95 views
11

我發展與gradle這個/的IntelliJ-想法多模塊項目,這裏是我的家項目的結構:搖籃:對於多個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

一種解決方案是爲也套用了Java插件的data項目,然後用常規項目的依賴關係(例如dependencies { runtime project(":data") })。但是,這需要一些努力來防止運送測試資源。

另一個解決方案不是讓data成爲一個Gradle項目,而是在其他兩個項目(sourceSets.main.resources.srcDir "../date/main/resources"; sourceSets.test.resources.srcDir "../data/test/resources")中直接包含其資源目錄。

+0

第二種解決方案聽起來更好。謝謝! –

4

好吧,我想通了。這其實很簡單。只要將「data」文件夾視爲另一個項目,並將附屬聲明添加到子項目中就可以實現。例如:

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

Eric,你好, 我想這樣做幾乎同樣的事情。你真的創建了:data項目作爲gradle項目嗎?如果是這樣,你能分享你的build.gradle嗎? – Dave00Galloway

2

我採取的方法是使用項目引用

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

老兄你是這樣一個該死的救命。我試圖花幾個小時來讓一個文件加載到兩個模塊而不重複它,但無論我把它放在哪裏,我給它命名了,或者我從類路徑中如何從一個模塊切換到另一個gradle模塊,得到了'FileNotFoundException'。這解決了問題! – anon58192932

+1

很高興它幫助了某人:) –

+0

嘗試此操作時出現堆棧溢出。 在org.gradle.api.internal.file.DefaultSourceDirectorySet.getSrcDirTrees(DefaultSourceDirectorySet.java:128) 之間反彈在org.gradle.api.internal.file.DefaultSourceDirectorySet.doGetSrcDirTrees(DefaultSourceDirectorySet.java:141) –