我们有一个多项目设置,其中一个公共模块在应用程序之间共享。每个模块都有自己的代码和测试用例,并从内部Maven存储库中获取库。依赖关系在逻辑上相关如下
Shared
取决于Internal
App A
取决于Shared
App B
取决于Shared
物理结构如下
- App_a
- src ( Code for `App a` & `Shared` module )
- etc
- test
- unit
- src
- build.gradle
- settings.gradle
- modules
- Shared
- build.gradle
- settings.gradle
- Internal
- src
- build.gradle
- App_b
- build.gradle
- settings.gradle
Internal
,Shared
,App A
,App B
等都有独立的gradle脚本,每个顶级项目都有settings.gradle
中定义的子项目(Shared
,App A
,App B
等)。最近创建了此设置的Gradle脚本,从命令行开始一切正常。
我最近更新了Gradle脚本以使用Eclipse。 Eclipse正确导入项目,并且还能够为子项目创建项目。我能够成功运行Gradle Tasks
视图中的所有gradle任务(包括来自eclipse插件的任务),但由于某种原因Eclipse不使用依赖库并显示编译错误。由于这个原因,我无法运行应用程序或通过Eclipse运行JUnit测试。
在Eclipse中
Internal
,App A
取决于Shared
等。Gradle Dependencies
的文件夹,展开后会显示build.gradle
中配置的库列表。我试着四处寻找,但没有找到任何解决方案。任何有关这方面的帮助将不胜感激。
我的设置如下
2014年10月17日更新:
我已成功取得进步。我不得不评论一些事情,但总的来说是一个很大的进步。
每个模块的构建脚本设置为源和& Java和Test sourceSets的资源。
当我尝试在Eclipse中导入它们时,除了Shared
之外,所有项目都正确导入。 Eclipse报告了我错过的Shared
的源路径错误。由Shared
未编译,App a
& App b
也没有编译。
出于某种原因,在导入“共享”时,Eclipse最终导入单元测试源目录(test/unit/src
)两次,然后抱怨重复条目。我尝试删除此项目并重新导入为普通项目(Import > General > Existing Projects into Workspace
)和Gradle项目(Import > Gradle > Gradle Project
),但错误没有消失。
我注释掉了test
sourceSet,它是编译依赖项并再次尝试。这次它奏效了。我现在能够通过eclipse编译所有项目,我也能够运行&调试程序并执行除Shared
以外的所有模块的测试用例。
Shared
模块与Internal
模块的不同之处(两者都是Gradle中的子项目),Shared
的源代码&测试不在它的项目目录中,它们驻留在App a
的源,它是Shared
的父目录(参见上面的目录结构)。这是应用程序小得多的遗留问题。这是通过使用包含和处理来处理的。排除过滤器来分隔源代码和App a
&的测试Shared
。这些gradle脚本在命令行上运行良好。
我已将问题从Shared
的构建脚本缩小到以下代码段。如果测试源集已被注释掉,那么一切正常。
sourceSets {
main {
java {
srcDirs = [ file('../../src/') ]
include 'com/abc/app1/service/**'
include 'com/abc/app1/util/**'
...
}
resources {
...
}
}
// test {
// java {
// srcDirs = [
// file('../../test/unit/src'),
// file('../../test/unit/etc/')
// ]
//
// exclude 'com/abc/app1/web/**'
// include 'com/abc/app1/service/**'
// include 'config/app-dao_test.xml'
// }
//
// resources {
// ...
// }
// }
//}