当前位置: 首页 > 知识库问答 >
问题:

分级源集依赖于另一个源集

章昆琦
2023-03-14

这个问题类似于使一个源集依赖于另一个源集

sourceSets {
  testenv
}

dependencies {
  testenvCompile sourceSets.main
}

这不起作用,因为您不能直接将源集添加为依赖项。建议的方法是:

sourceSets {
  testenv
}

dependencies {
  testenvCompile sourceSets.main.output
}

但是这在eclipse中不能正常工作,因为当我清理gradle build文件夹时,eclipse不能再编译了,因为它依赖于gradle build。此外,如果我更改了主代码,我必须在gradle中重新构建项目,以便更改在Eclipse中生效。

如何正确声明依赖项?

这个

sourceSets {
  testenv
}

dependencies {
  testenvCompile files(sourceSets.testenv.java.srcDirs, sourceSets.testenv.resources.srcDirs)
}

适用于主源代码,但由于我现在引用了.java文件,因此缺少从注释处理器生成的类:(

共有1个答案

龚运乾
2023-03-14

所以这一切都是要走的路:

sourceSets {
  testenv
}

dependencies {
  testenvCompile sourceSets.main.output
}

要使它在eclipse中正常工作,您必须手动从eclipse类路径中排除所有sourceSet输出。这很难看,但对我来说很管用:

Project proj = project

eclipse {
  classpath {
    file {
      whenMerged { cp ->
        project.logger.lifecycle "[eclipse] Excluding sourceSet outputs from eclipse dependencies for project '${project.path}'"
        cp.entries.grep { it.kind == 'lib' }.each { entry ->
          rootProject.allprojects { Project project ->
            String buildDirPath = project.buildDir.path.replace('\\', '/') + '/'
            String entryPath = entry.path

            if (entryPath.startsWith(buildDirPath)) {
              cp.entries.remove entry

              if (project != proj) {
                boolean projectContainsProjectDep = false
                for (Configuration cfg : proj.configurations) {
                  boolean cfgContainsProjectDependency = cfg.allDependencies.withType(ProjectDependency).collect { it.dependencyProject }.contains(project)
                  if(cfgContainsProjectDependency) {
                    projectContainsProjectDep = true
                    break;
                  }
                }
                if (!projectContainsProjectDep) {
                  throw new GradleException("The project '${proj.path}' has a dependency to the outputs of project '${project.path}', but not to the project itself. This is not allowed because it will cause compilation in eclipse to behave differently than in gradle.")
                }
              }
            }
          }
        }
      }
    }
  }
}
 类似资料:
  • 我们使用base ClearCase作为源代码管理工具。当从源集成时,如何实现依赖管理?在ClearCase中,我想这需要设置配置规范来选择所有所需文件的所需版本。有什么工具可以实现这一点吗?

  • 本文向大家介绍gradle 依赖于另一个Gradle项目,包括了gradle 依赖于另一个Gradle项目的使用技巧和注意事项,需要的朋友参考一下 示例 对于多项目gradle构建,有时可能需要依赖构建中的另一个项目。为此,请在项目的依赖项中输入以下内容: ':OtherProject'从目录结构的根引用的项目gradle路径在哪里。 为了':OtherProject'在build.gradle文

  • 编辑口味和路径: 目前我有: ext是一个文件,其中所有特定于ProductFlayer的配置都是这样定义的: 然而,我真的希望动态添加,这样我仍然可以保持我的配置文件完整。我的构建配置非常复杂,并不像这里描述的那么简单,因此我不需要建议将源文件放入文件夹SRC/Flavor1Debug中,因为这些资源也来自其他productFlavors,所以这不起作用。

  • 4.6 资源依赖 如果bean本身将通过某种动态过程来确定和提供资源路径,那么bean可以使用ResourceLoader接口来加载资源。 j假设以某种方式加载一个模板,其中需要的特定资源取决于用户的角色。 如果资源是静态的,那么完全消除ResourceLoader接口的使用是有意义的,只需让bean公开它需要的Resource属性,那么它们就会以你所期望的方式被注入。 什么使得它们轻松注入这些属

  • 我正在寻找一种方法来收集给定项目的所有依赖约束(通过常规和/或和/或“手动”执行),从一个自定义Gradle插件。 在Maven world中,您可以解析“工件描述符”,该描述符将提供对工件上强制执行的所有托管依赖项的有效列表的访问。我到目前为止还找不到这种信息是如何在Gradle收集的。 有什么建议吗?谢谢!

  • 问题内容: 我经历了太多的代码,试图找出我做错了什么,但我却步履蹒跚,浪费时间。这将非常简单,但我无法弄清楚。 我正在开发一个Android应用程序,需要将2个微调器放在一个活动上。第二个微调器将根据第一个微调器上选择的条目进行填充。听起来很简单吧? 所以这就是我想做的。如果用户选择Mobile,则应显示中的内容,当用户选择Large business 时应运行,最后一个条目应调用。我得到的只是一