【发布时间】:2020-08-01 10:09:59
【问题描述】:
我尝试运行一个非常简单的使用 java 9 模块的 gradle 项目,但我收到以下错误。
/home/vadim/IdeaProjects/test_modules/src/main/java/module-info.java:2: error: module not found: HdrHistogram
requires HdrHistogram;
^
这是https://github.com/vad0/test_modules。 主类基本上什么都不做。
package app;
import org.HdrHistogram.Histogram;
public class RunHdr {
public static void main(String[] args) {
final Histogram histogram = new Histogram(5);
System.out.println(histogram);
}
}
它只使用一个依赖项:HdrHistogram。我根据官方 gradle 教程 https://docs.gradle.org/current/samples/sample_java_modules_multi_project.html 在 build.gradle 中包含了这个神奇的命令。
java {
modularity.inferModulePath = true
}
整个 build.gradle 看起来是这样的。
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
java {
modularity.inferModulePath = true
}
dependencies {
compile group: 'org.hdrhistogram', name: 'HdrHistogram', version: '2.1.12'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
module.info 看起来像这样
module test.modules.main {
requires HdrHistogram;
}
我已经阅读了许多关于 Jigsaw 的教程和一大堆与之相关的 stackoverflow 问题,但仍然无法使这个简单的示例工作。我该如何解决?
谢谢
【问题讨论】:
-
奇怪!我使用maven,并且能够使用相同的工件版本添加模块
HdrHistogram。 -
不幸的是,从 gradle 切换到 maven 对我来说不是一个选择
-
@Naman 你知道
maven做了什么来使它成为一个自动模块吗? -
@Eugene 在不深入实际代码的情况下,从build logs Maven 似乎正在做的是首先识别编译路径上的所有依赖项。然后基于本身是模块化的工件/罐子,即包括 模块描述符,或在 META-INF 中声明 Automatic-Module-Name,或任何其他作为一部分的工件maven 模块本身的
module-info.java被视为在模块路径而不是类路径上。共享的日志有两个组成部分可以明确区分。 -
@Naman here 是 gradle 如何通过 gradle 核心作者的插件实现的。这是一件美丽的事情!这个想法并不复杂,但它非常好。他们让 you 为非模块化 jar 定义
module-info.java。我有说过我已经喜欢它了吗?
标签: java gradle java-9 java-platform-module-system hdrhistogram