Gradle多模块项目设置
我最近开始使用Gradle并替换了我现有的基于Maven的项目。过去我在使用Maven处理多模块构建时遇到很多问题。在处理多模块水龙头时,Gradle呼吸了新鲜空气,但还不是很完美。
我的项目有以下文件夹布局:
-- Projects---- EnterpriseApp1
------ EarProject
-------- build.gradle
------ EjbProject
-------- build.gradle
------ WarProject
-------- build.gradle
------ properties.gradle
------ build.gradle
---- CommonLib
------ build.gradle
---- ClientApplication
------ build.gradle
我遇到的问题是“ EnterpriseApp1”和“ ClientApplication”都依赖于CommonLib项目。我不知道如何配置“
EnterpriseApp1”构建文件以使用CommonLib项目作为“
EjbProject”的依赖项。我已经很接近使它起作用,但还没有完全起作用。通过复制“
EnterpriseApp1”内的CommonLib文件夹已经取得了成功,但这不是一个长期的解决方案。
这是“ EnterpriseApp1”中我当前的properties.gradle文件:
include "EarProject", "EjbProject", "WarProject"includeFlat "CommonLib"
根据Gradle文档,“ settings.gradle”文件中的“ includeFlat”命令将在与“
settings.gradle”文件所在的文件夹相同的控制杆中包含项目(期望的行为)。
EnterpriseApp1 / build.gradle文件:
subprojects { apply plugin: 'java'
sourceCompatibility = 1.6
group = 'org.example'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
...
}
dependencies {
}
}
EnterpriseApp1 / EjbProject / build.gradle:
apply plugin: 'java'sourceCompatibility = 1.6
repositories {
mavenCentral()
...
}
dependencies {
compile project(':CommonLib')
compile group: 'org.restlet.jee', name: 'org.restlet', version: '2.0.11'
compile group: 'ma.glasnost.orika', name: 'orika-core', version: '1.0'
...
compile group: 'javax.jmdns', name: 'jmdns', version: '3.4.1'
}
当我从EnterpriseApp1文件夹执行“ gradle clean
build”时,所有依赖项都按预期下载,并且项目开始编译(包括CommonLib项目),但是EjbProject项目在构建过程中失败,因为它缺少CommonLib
jar参考。Gradle不够聪明(或者我完全无能为力;)),无法将EjbProject配置为使用从CommonLib项目构建阶段生成的Jar。
对于冗长而复杂的设置,我深表歉意。我一直在努力设法弄清楚这一点,但是几乎没有想法。我真的很感谢社区的任何帮助。
谢谢!
回答:
您选择的目录布局已经暗示了一个好的解决方案。我建议有三个独立的构建:EnterpriseApp1
,CommonLib
,和ClientApplication
。我将发布CommonLib
到Maven或Ivy存储库,以便其他两个版本可以从那里使用它。对于本地开发,您可以发布CommonLib
到本地Maven仓库(最简单)或基于文件的Ivy仓库。
以上是 Gradle多模块项目设置 的全部内容, 来源链接: utcz.com/qa/416313.html