无法识别java库插件的api配置

无法识别java库插件的api配置,java,gradle,gradle-plugin,gradle-multi-project-build,Java,Gradle,Gradle Plugin,Gradle Multi Project Build,我是Gradle的新手,正在使用Gradle 6.1。 我正在编写一个小应用程序来理解Gradle的多项目应用程序和Java库插件的概念 我的问题是: java如何在不从子项目2导入DefaultRandomGenerator类的情况下完美运行 为什么在父项目(MultiProjectApp)的build.grade文件中出现错误消息“找不到方法调用api的候选对象” 以下是我的申请代码: 父项目(MultiProjectApp)文件 格雷德尔酒店 格雷德尔先生 子项目2文件 格雷德

我是Gradle的新手,正在使用Gradle 6.1。
我正在编写一个小应用程序来理解Gradle的多项目应用程序和Java库插件的概念

我的问题是:
  • java如何在不从子项目2导入DefaultRandomGenerator类的情况下完美运行

  • 为什么在父项目(MultiProjectApp)的build.grade文件中出现错误消息“找不到方法调用api的候选对象”


  • 以下是我的申请代码:


    父项目(MultiProjectApp)文件

    格雷德尔酒店 格雷德尔先生


    子项目2文件

    格雷德尔先生 RandomGenerator.java DefaultRandomGenerator.java

    子项目1文件

    格雷德尔先生 App.java java如何在不导入的情况下运行良好 子项目2中的DefaultRandomGenerator类

    它之所以有效,是因为它们都在同一个包中(
    org.examples

    请注意,如果使用Java 9中引入的新模块系统,这将不起作用。因为这两个项目被认为是“分离”的,所以您需要各种技巧才能使其工作。

    为什么我会收到错误消息“找不到方法的候选项?” 在父项目(MultiProjectApp)的build.grade文件中调用api

    这是一个IDE问题,而不是gradle问题。如果你跑步,它应该还能工作

    在Vscode中运行它的示例

    rootProject.name = 'MultiProjectApp'
    include 'SubProject-1'
    include 'SubProject-2'
    
    allprojects {
        apply plugin: 'java'
    
        group 'org.example'
        version '1.0-SNAPSHOT'
    
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    
        repositories {
            mavenCentral()
        }
    
    }
    project(':SubProject-1') {
    
        dependencies {
            implementation project(':SubProject-2')
        }
    }
    
    project(':SubProject-2') {
        apply plugin: 'java-library'
    
        dependencies {
            api 'org.apache.commons:commons-math3:3.2'
            implementation 'org.apache.logging.log4j:log4j-core:2.5'
            testImplementation "junit:junit:4.12"
        }
    }
    
    Empty file
    
    package org.examples;
    
    public interface RandomGenerator {
    
        String name();
        int generate();
    }
    
    package org.examples;
    
    import org.apache.commons.math3.random.RandomDataGenerator;
    
    public class DefaultRandomGenerator implements RandomGenerator {
    
        public String name() {
            return "Main Random Number Generator";
        }
    
        public int generate() {
            final RandomDataGenerator randomDataGenerator = new RandomDataGenerator();
            return randomDataGenerator.nextInt(5, 10);
        }
    }
    
    Empty file
    
    package org.examples;
    
    import org.apache.commons.math3.random.RandomDataGenerator;
    
    public class App {
    
        public static void main(String[] args) {
            RandomGenerator aRandomGenerator = new DefaultRandomGenerator();
            System.out.println("The 1st random number is :" + aRandomGenerator.generate());
            System.out.println("The 2nd random number is :" + generateMy());
        }
    
        public static int generateMy() {
            final RandomDataGenerator aRandomDataGenerator = new RandomDataGenerator();
            return aRandomDataGenerator.nextInt(5, 10);
        }
    }