使用Java 9和Java 8的Gradle多项目

使用Java 9和Java 8的Gradle多项目,gradle,java-8,java-9,multi-project,Gradle,Java 8,Java 9,Multi Project,我想将gradle多项目迁移到Java9。我想一步一步地走,而不是尝试大爆炸。我的想法是从顶部(主模块)开始,然后向下工作。这意味着,我将在Java9中拥有一个主模块,而其他模块仍在Java8中。 如果我的信息是正确的,一个好方法是将Java8中的模块集成为自动模块。它可以与第三方libs作为jar一起工作,但我不知道如何教gradle使用我自己的java8模块。 假设我有一个主java9模块“java9”和一个java8库模块“java8” 到目前为止我所做的: “java8”build.gr

我想将gradle多项目迁移到Java9。我想一步一步地走,而不是尝试大爆炸。我的想法是从顶部(主模块)开始,然后向下工作。这意味着,我将在Java9中拥有一个主模块,而其他模块仍在Java8中。 如果我的信息是正确的,一个好方法是将Java8中的模块集成为自动模块。它可以与第三方libs作为jar一起工作,但我不知道如何教gradle使用我自己的java8模块。 假设我有一个主java9模块“java9”和一个java8库模块“java8” 到目前为止我所做的: “java8”build.gradle

apply plugin: 'java'

ext.moduleName = 'java8module.main'

jar {
    inputs.property("moduleName", moduleName)
    manifest {
        attributes('Automatic-Module-Name': moduleName)
    }
}
apply plugin: 'application'
mainClassName = 'com.thoughtblaze.java9.main.Main'
ext.moduleName = 'java9main.main'
compileJava {
  inputs.property("moduleName", moduleName)
  doFirst {
      options.compilerArgs = [
            '--module-path', classpath.asPath,
      ]
      classpath = files()
  }
}
dependencies {
  compile project (':java8')
}
这给了我一个java8jar,其中有一个我在MANIFEST.MF中决定使用的模块名

“java9”build.gradle

apply plugin: 'java'

ext.moduleName = 'java8module.main'

jar {
    inputs.property("moduleName", moduleName)
    manifest {
        attributes('Automatic-Module-Name': moduleName)
    }
}
apply plugin: 'application'
mainClassName = 'com.thoughtblaze.java9.main.Main'
ext.moduleName = 'java9main.main'
compileJava {
  inputs.property("moduleName", moduleName)
  doFirst {
      options.compilerArgs = [
            '--module-path', classpath.asPath,
      ]
      classpath = files()
  }
}
dependencies {
  compile project (':java8')
}
“java9”模块信息

module java9main.main {
  requires java9module.main ;
  requires java8module.main ;
}
现在的问题是: “java9”不承认java8是必需的模块,因此我无法访问java8模块的任何类


我在这里错过了什么?

您使用的是什么版本的Gradle和Java?我尝试了一下,对我来说效果很好-我的Gradle说“4.5”嗯,你的代码很有魅力。。。很多。现在我可以试着找出代码中的问题所在,我只需要找出如何教授IntelliJ,找到对Java8模块的引用“requires”。目前,它认为它是“找不到”的,看起来您正在声明一个模块信息文件,该文件取决于使用moduleName参数传递给javac的moduleName;这是不需要的,并且可能是错误的来源(可能是错误消息?)。