首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Gradle多模块项目设置

Gradle多模块项目设置
EN

Stack Overflow用户
提问于 2012-01-26 11:27:23
回答 1查看 28.7K关注 0票数 22

我最近开始使用Gradle并替换我现有的基于Maven的项目。过去,我在使用Maven处理多模块构建时遇到了很多问题。Gradle在处理多模块构建时是一股新鲜空气,但它还不够完美。

我的项目有以下文件夹布局:

代码语言:javascript
复制
-- 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文件:

代码语言:javascript
复制
include "EarProject", "EjbProject", "WarProject"
includeFlat "CommonLib"

根据Gradle文档,"settings.gradle“文件中的"includeFlat”命令将包含与"settings.gradle“文件所在文件夹相同级别的项目(期望的行为)。

EnterpriseApp1/build.gradle文件:

代码语言:javascript
复制
subprojects {
   apply plugin: 'java'

   sourceCompatibility  = 1.6
   group = 'org.example'
   version = '1.0-SNAPSHOT'

   repositories {
      mavenCentral()
      ...
   }

   dependencies {

   }    
}

EnterpriseApp1/EjbProject/build.gradle:

代码语言:javascript
复制
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。

我为冗长和复杂的设置道歉。一段时间以来,我一直在努力解决这个问题,但几乎已经没有想法了。如果能为社区提供任何帮助,我将非常感激。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-27 12:36:43

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9013597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档