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。

对于冗长而复杂的设置,我深表歉意。我一直在努力设法弄清楚这一点,但是几乎没有想法。我真的很感谢社区的任何帮助。

谢谢!

回答:

您选择的目录布局已经暗示了一个好的解决方案。我建议有三个独立的构建:EnterpriseApp1CommonLib,和ClientApplication。我将发布CommonLib到Maven或Ivy存储库,以便其他两个版本可以从那里使用它。对于本地开发,您可以发布CommonLib到本地Maven仓库(最简单)或基于文件的Ivy仓库。

以上是 Gradle多模块项目设置 的全部内容, 来源链接: utcz.com/qa/416313.html

回到顶部