java - 在 Gradle 中使用 Java 9 项目 Jigsaw
问题描述
我正在使用 Gradle、Kotlin 和 Java 9 模块(Jigsaw)构建一个库。我正在尝试构建类似于OpenJDK Jdk的构建结构,因此结构如下所示:
src
module1 (setup as a IJ module)
kotlin (setup as IJ sources)
example.packages
module-info.java
module2 (setup as a IJ module)
kotlin (setup as IJ sources)
example.packages
module-info.java
settings.gradle
build.gradle
我遇到的第一个主要问题是,当尝试重新加载 gradle 或类似的东西时,它会导致这个问题(当然,'PATH_TO_PROJECT' 只是我项目的完整路径):
项目目录“PATH_TO_PROJECT/src/module1”不是设置文件“PATH_TO_PROJECT/settings.gradle”定义的构建的一部分。如果这是一个不相关的构建,它必须有自己的设置文件。
(这个问题发生在我拥有的每个模块上)
当我将 settings.gradle 添加到任何模块时,其他模块会停止识别它和/或它不会添加到模块路径中。如果我不添加 settings.gradle,那么我的模块可以工作,但 gradle 不能。我还尝试通过名称和指定路径将模块包含在根 settings.gradle 中。如果我按名称包含,同样的问题,如果我包含并指定一个路径,那么 gradle 抱怨它找不到指定的项目(我知道路径是正确的)。
这是我的设置/build.gradle:
设置.gradle:
rootProject.name = 'example'
include 'module1', 'module2'
//subProject 'module1', 'module2' //Uncommenting this to provide a direct path to the module
private subProject(String... name) {
for (int i = 0; i < name.length; i++) {
project(name[i]).projectDir = new File(rootDir.absolutePath + "${File.separator}src${File.separator}${name[i]}")
}
}
build.gradle(我用 build.gradle 尝试了很多不同的东西,所以它到处都是):
plugins {
id 'java'
id 'java-library'
id 'org.jetbrains.kotlin.jvm' version '1.5.0'
}
group 'com.example' //not my actually group ID
version '1.0-SNAPSHOT'
test {
useJUnit()
}
java {
modularity.inferModulePath = true
}
tasks.named('compileJava') {
modularity.inferModulePath = true
options.javaModuleVersion = provider { project.version }
}
dependencies {
compile 'org.jetbrains:annotations:20.1.0'
compile 'org.ow2.asm:asm:9.1'
compile 'org.ow2.asm:asm-util:9.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
谢谢!我真的没有在这方面找到太多东西,而且那里的例子似乎对我不起作用!
解决方案
推荐阅读
- ssh - 当 ssh 主机连接到 VPN 时,有没有办法让 ssh 连接保持活动状态?
- reactjs - React.js 中的单个 JSON 对象读取标题渲染方法问题
- r - 根据ggplot2中的变量对堆叠条进行排序
- reactjs - 如何在本机反应中将图像上传为二进制文件
- cucumber - 测试失败,给出错误 - cucumber.runtime.CucumberException: Arity mismatch:
- numpy - 如何编写一个cupy用户定义的核函数来计算分段和
- r - 使用行号在 R 中创建 0/1 列
- c++ - 寻址图像资源
- oracle - 编写一个 PL/SQL 块来确定服务时间最长的员工在一周中的哪个时间段(工作日或周末)开始工作
- c++ - 如何从类中删除外部依赖项