导入的gradle项目未在Eclipse中编译

时间:2014-10-13 08:26:44

标签: java eclipse gradle

我们有一个多项目设置,其中一个公共模块在应用程序之间共享。每个模块都有自己的代码和测试用例,并从内部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

InternalSharedApp AApp B等都有独立的gradle脚本,每个顶级项目都有settings.gradle中定义的子项目(SharedApp AApp B等)。最近创建了此设置的Gradle脚本,从命令行开始一切正常。

我最近更新了Gradle脚本以使用Eclipse。 Eclipse正确导入项目,并且还能够为子项目创建项目。我能够成功运行Gradle Tasks视图中的所有gradle任务(包括来自eclipse插件的任务),但由于某种原因Eclipse不使用依赖库并显示编译错误。由于这个原因,我无法运行应用程序或通过Eclipse运行JUnit测试。

在Eclipse中

  • 项目依赖关系似乎设置正确,即共享取决于InternalApp A取决于Shared等。
  • 每个项目的库选项卡似乎也是正确的。它有一个名为Gradle Dependencies的文件夹,展开后会显示build.gradle中配置的库列表。

我试着四处寻找,但没有找到任何解决方案。任何有关这方面的帮助将不胜感激。

我的设置如下

  • Java:1.8
  • Eclipse:Luna
  • Gradle:2.1
  • Gradle IDE:3.6.0.201405280533-M1

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 {
//            ...
//        } 
//    }
//} 

0 个答案:

没有答案