Gradle Java 9模块未找到。

4
我尝试使用Gradle在Java 9中开发一个小示例,但是我找不到确切的选项来创建一个可工作的运行配置。我已经试图从这个小教程中复制正确的部分。但是运行任务只会出现一个错误:

java.lang.module.FindException: 找不到模块 de.project.crawler

显然,我给Gradle提供的模块路径有误,但我不知道该如何修复。

我的工作目录:

project/
  crawler/
  |  src/
  |  |  main/
  |  |  |  java/
  |  |  |  |  de.project.crawler/
  |  |  |  |  |  Main.java
  |  |  module-info.java
  |  build.gradle
  |  settings.gradle
  build.gradle
  settings.gradle

build.gradle:

subprojects {
    afterEvaluate {
        compileJava {
            inputs.property("moduleName", moduleName)
            doFirst {
                options.compilerArgs = [
                        '--module-path', classpath.asPath,
                ]
                classpath = files()
            }
        }
    }
}

crawler/build.gradle:

plugins {
    id 'java-library'
    id 'application'
}

ext.moduleName = 'de.project.crawler'
mainClassName = 'de.project.crawler/de.project.crawler.Main'

repositories {
    jcenter()
}

run {
    inputs.property("moduleName", moduleName)
    doFirst {
        jvmArgs = [
                '--module-path', classpath.asPath,
                '--module', mainClassName
        ]
        classpath = files()
    }
}

startScripts {
    inputs.property("moduleName", moduleName)
    doFirst {
        classpath = files()
        defaultJvmOpts = [
                '--module-path', 'APP_HOME_LIBS',
                '--module', mainClassName
        ]
    }
}

crawler/src/module-java.info

module de.project.crawler {
}

crawler/src/main/java/de.project.crawler/Main.java

package de.project.crawler;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hallo");
    }
}

如果我在IntelliJ中尝试,一切正常。 如果我在cmd中使用java9编译并运行它,一切正常。 如果我尝试“gradle run”,则会出现我在介绍中提到的错误。


3
源代码布局有点不寻常,我原本期望在模块源代码的顶级目录(src/main/java)中看到module-info.java文件。 - Alan Bateman
1
这是问题的解决者。您想将其发布为我可以标记的答案吗? - BeJay
如果您正在寻找完全可行的解决方案,请查看我的答案此处 - Martin Meeser
1个回答

7

module-info.java文件放错了位置。这个文件应该放在模块的src/main/java目录下。正确的结构如下:

project/
  crawler/
  |  src/
  |  |  main/
  |  |  |  java/
  |  |  |  |  de.project.crawler/
  |  |  |  |  |  Main.java
  |  |  |  |  module-info.java
  |  build.gradle
  |  settings.gradle
  build.gradle
  settings.gradle

感谢评论区的Alan Bateman提供帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接