java - 在 gradle 中构建具有两个或多个根的多模块项目
问题描述
我刚刚从 maven 切换到 gradle,因为我认为这是一个好主意,因为我无法用 maven 解决我的问题。好吧,gradle 也没有解决我的问题(这就是你在这里的原因,哈哈)但它更快,我会继续使用它。
这是我所拥有的:
project/
├── components/
│ ├── Software Component A
│ └── Software Component B
└── modules/
├── Module A
├── Module B
├── Module C
└── Module D
软件组件包括对整个项目通用的模块。出于测试原因,我希望能够使用 IntelliJ 运行该软件,并且我想为软件组件构建两个单独的 jar。
这就是我将一组较小的项目重命名为他们的角色来测试的结果:
这是根项目的 gradle 配置:
// build.gradle
plugins {
id 'java'
id 'io.freefair.lombok' version '4.1.1'
}
subprojects {
apply plugin: 'java'
apply plugin: 'io.freefair.lombok'
sourceCompatibility = '1.8'
group = 'io.cloudsystem'
version = '2.0.0'
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
javadoc.options.encoding = 'UTF-8'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
}
}
test {
useJUnitPlatform()
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
// settings.gradle
rootProject.name = 'gradle_root_project'
include 'module_a', 'module_b', 'module_c', 'software_component_a'
这适用于软件组件(始终仅设置rootProject.name = 'projectname'
:)
// build.gradle
plugins {
id 'application'
}
application {
mainClassName = 'io.cloudsystem.Controller'
}
dependencies {
implementation project(':ModuleLoader')
implementation project(':TerminalModule')
implementation project(':NetworkModule')
}
这整个东西现在用gradle build
但我得到的只是一组无用的罐子......组件没有运行,根文件只是一个空清单,当我在 IntelliJ 中运行项目时(仅在我打开根项目时有效,否则缺少导入)输出很奇怪/显示错误或什至没有显示。
解决方案
感谢@Slaw!我使用的结构可以使用复合构建。无论如何,还需要gradle shadow来构建一个具有依赖关系的工作 jar。要构建它,我必须按照他们网页上的描述对其进行配置并运行gradle clean shadowJar
.
推荐阅读
- r - 如何从频率表中堆积条形图?
- django - 如何在 django 中远程输入电子邮件凭据?
- python - 代理请求在 beautifulSoup 项目中使用我的家庭 IP
- node.js - 正则表达式 - 如何过滤此 NGINX 日志消息?
- excel - 向每一行添加分页符,但出现应用或对象定义错误
- assembly - MSP430 程序集中的正确函数调用和数组操作
- python - 如何使用python删除xml文件中的子元素
- reactjs - 如何使用 webpack 为不同的网站构建两个单独的 bundle
- java - 列出依赖项时未找到 JDEPS 模块异常
- v-for - quasar q-carousel 与 v-for