当前位置: 首页 > 面试题库 >

Gradle多模块项目设置

邢飞鸿
2023-03-14
问题内容

我最近开始使用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仓库。



 类似资料:
  • 我如何在一个Android Gradle项目中设置模块的依赖关系,在这个项目中,模块之间相互依赖,这样我就可以一次部署所有模块的新快照或发布版本的构建? 该项目的结构如下: 项目配置文件如下,仅显示相关部分(根据我的判断): 设置。分级: lib-help/gradle.properties: lib-help/build.gradle: 当我运行时,所有内容都编译得很好,并且上载文件被推送到正确

  • 主要内容:1- 介绍,2- 示例模型,3-创建项目数学库,4- 创建另一个项目:MathWebApp,5- 创建GradleMain项目,6- 构建项目,7- 运行MathWebApp1- 介绍 本教程文章基于: Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1) 如果您是初学者Gradle的。那么建议先看看初学者Gradle(Gradle Hello world)的文章: http://www.yiib

  • 我有一个多模块gradle项目。 Root有以下模块:核心、应用程序(依赖于核心)、web(依赖于应用程序、核心) 从https://plugins.gradle.org/plugin/io.spring.dependency-management 我曾经用过 核心build.gradle内。 当我触发 在root命令提示符下,CoreJAR已成功构建,但应用程序无法解析依赖项的版本。 commo

  • 我有一个基于java和kotlin的多模块gradle项目。我正在尝试设置声纳分析。我在根项目中配置了sonar,并用CircleCI进行了分析。sonarcloud中的结果仅适用于其中一个子项目。 我的项目结构如下: 项目A/构建。格拉德尔 项目B/构建。格拉德尔 ProjectC/build。格拉德尔 建造。格拉德尔 这是我的根构建。格雷德尔。

  • 问题内容: 我有学习的背景和思想。 我喜欢使用的其中一项功能是可以将项目制作为多Maven模块。例? 令人高兴的是,每个模块都可以具有自己的依赖性,并且可以独立测试它们,而不用运行一个整体应用程序。 我们如何实现类似的东西,或者它的生态系统? 问题答案: 你绝对可以做到的。这被称为SBT Multi-Project build。您可以使用以下内容定义一个主项目和多个子项目(来自上面的docs链接)

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并