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

问题描述 投票:1回答:1

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

我的问题是:

  1. App.java如何完美运行,而无需从SubProject-2导入DefaultRandomGenerator类

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

以下是我的应用程序代码:

父项目(MultiProjectApp)文件

settings.gradle

rootProject.name = 'MultiProjectApp'
include 'SubProject-1'
include 'SubProject-2'

build.gradle

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"
    }
}

enter image description here

SubProject-2文件

build.gradle

Empty file

RandomGenerator.java

package org.examples;

public interface RandomGenerator {

    String name();
    int generate();
}

DefaultRandomGenerator.java

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);
    }
}

SubProject-1文件

build.gradle

Empty file

App.java

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);
    }
}
java gradle gradle-plugin gradle-multi-project-build
1个回答
0
投票

App.java如何在不导入的情况下运行完美SubProject-2中的DefaultRandomGenerator类]

这是有效的,因为它们都在同一个程序包(org.examples)中。

请注意,如果使用Java 9中引入的新模块系统,这将无法正常工作。因为这两个项目被认为是“拆分”的,因此您将需要各种技巧使其正常工作。

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

这是一个IDE问题,不是gradle问题。如果您运行,它仍然可以正常工作。

在Vscode中执行runnig的示例Example with vscode

© www.soinside.com 2019 - 2024. All rights reserved.