考虑以下多项目构建脚本:

build.gradle

subprojects {
  apply plugin: 'java'
  apply plugin: 'maven'
  group = "myorg"
  version = "1.0.0-SNAPSHOT"
}

project(':client') {
  dependencies {
    compile 'myorg:shared:1.0.0-SNAPSHOT'
  }
}

带有以下文件:
├── build.gradle
├── client
│   └── src
│       └── main
│           └── java
│               └── myorg
│                   └── client
│                       └── MyOrgClient.java
├── settings.gradle
└── shared
    └── src
        └── main
            └── java
                └── myorg
                    └── shared
                        └── MyOrgObj.java

在上述文件中,MyOrgClient.java包含myorg.shared.MyOrgObj和settings.gradle具有单行include 'client', 'shared'
问题

与Maven相关的任务(例如在本地安装和部署到远程存储库)的项目/任务构建顺序未考虑隐含的项目依赖性。由于gradle不知道'myorg:shared:1.0.0-SNAPSHOT'是由project(':shared')创建的,因此构建顺序为:client -> :shared,并导致类似以下错误:
$ gradle install
:client:compileJava

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all dependencies for configuration ':client:compile'.
> Could not find myorg:shared:1.0.0-SNAPSHOT.
  Required by:
      myorg:client:1.0.0-SNAPSHOT

问题:
是否有解决此问题的标准方法?我尝试了以下解决方案,但未成功:
  • 使用mustRunAfter,但是遇到了尚不存在的任务的问题。我也认为这不能与大量项目一起使用
  • archives project(':shared')添加到客户端的依赖项
  • compile project(':shared')添加到客户端的依赖项,然后将其从生成的pom中删除。不幸的是,这并未将依赖项添加到安装任务或 Artifact 中。发布编辑:这实际上是解决方案。项目依赖项将在生成的pom.xml中提供正确的版本/名称/组,因此不需要显式的group:name:version依赖项
  • 最佳答案

    您必须使用与Maven大致相同的方式定义项目之间的依赖关系:

    例如这样:

    project(':app') {
      apply plugin: 'ear'
      dependencies {
        compile project (':webgui')
        compile project (':service')
      }
    }
    

    但是您需要定义settings.gradle,其中包含如下模块:
    include 'app'
    include 'domain'
    include 'service'
    include 'service-client'
    include 'webgui'
    

    关于maven - Maven任务的Gradle项目构建顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20978020/

    10-11 02:43
    查看更多