考虑以下多项目构建脚本:
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/