2013-11-22 96 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) –