首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到阶梯式拼图模块

找不到阶梯式拼图模块
EN

Stack Overflow用户
提问于 2020-08-01 10:09:59
回答 1查看 1.2K关注 0票数 4

我尝试运行一个非常简单的gradle项目,它使用java 9模块,但是我收到以下错误。

代码语言:javascript
复制
/home/vadim/IdeaProjects/test_modules/src/main/java/module-info.java:2: error: module not found: HdrHistogram
    requires HdrHistogram;
             ^

这里是模块。主修课基本上什么也不做。

代码语言:javascript
复制
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教程build.gradle,我在project.html中包含了这个神奇的命令。

代码语言:javascript
复制
java {
    modularity.inferModulePath = true
}

整个build.gradle都是这样的。

代码语言:javascript
复制
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看起来像这样

代码语言:javascript
复制
module test.modules.main {
    requires HdrHistogram;
}

我已经读过许多关于Jigsaw的教程和一大堆与其相关的堆叠溢出问题,但仍然无法使这个简单的示例工作。我该怎么解决呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-17 19:07:33

不幸的是,gradle并没有把每个jar当作一个模块(用简单的话来说)。如果您想知道gradle如何构建module-path (而不是class-path),您可能希望从这里开始,特别是从isModuleJar方法开始。很容易理解(尽管我花了将近两天的时间来设置gradle并调试问题),您正在尝试使用的依赖项: gradle说它不是一个模块(它没有错,但我也不确定它是否正确)。为了使其非常正确,gradle 将您的依赖项添加到CLASSPATH。,但是在下一行:它不会将您的依赖项添加到module-path,因为如果isModuleJar中的过滤器失败了。

我不知道这是否是一个bug,也可能是故意的,但解决方案很简单:

代码语言:javascript
复制
plugins.withType(JavaPlugin).configureEach {
    java {
        modularity.inferModulePath = true
    }

    tasks.withType(JavaCompile) {
        doFirst {
            options.compilerArgs = [
                '--module-path', classpath.asPath,
            ]
            classpath = files()
        }
    }
}

你故意把它加到小路上。我会指出这是一个缺陷,让我们看看他们要说什么。

编辑

更好的是,使用由gradle提交者编写的插件:

代码语言:javascript
复制
plugins {
    id 'java'
    id 'de.jjohannes.extra-java-module-info' version "0.1"
}

对于你的情况,最简单的选择是:

代码语言:javascript
复制
extraJavaModuleInfo {
     automaticModule("HdrHistogram-2.1.12.jar", "HdrHistogram")
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63204044

复制
相关文章

相似问题

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