【问题标题】:Gradle Project Build Order For Maven TasksMaven 任务的 Gradle 项目构建顺序
【发布时间】:2014-01-07 17:27:25
【问题描述】:

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

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.xml 中删除它。不幸的是,这不会将依赖项添加到安装任务或 artifactoryPublish 编辑: 这实际上是解决方案。项目依赖将在生成的 pom.xml 中提供正确的版本/名称/组,因此不需要显式的 group:name:version 依赖

【问题讨论】:

    标签: maven gradle


    【解决方案1】:

    您必须以与 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'
    

    【讨论】:

    • 我在问题中提到我有一个带有include 'client', 'shared' 行的settings.gradle。我不确定将它分成单独的行会改变什么
    • 这行得通。他们对我的主要误解是我不知道项目依赖项会创建具有正确组/名称/版本信息的 pom.xml。我认为这是因为我早期遇到的一个问题是依赖项目没有定义版本或组。
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 2017-02-11
    • 2014-05-03
    • 2021-07-30
    • 2013-08-21
    • 1970-01-01
    • 2012-06-23
    • 2014-05-16
    相关资源
    最近更新 更多