java - java-library 插件的 api 配置无法识别

标签 java gradle gradle-plugin gradle-multi-project-build

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

我的问题是:

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

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


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


父项目 (MultiProjectApp) 文件


设置.gradle

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

构建.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 文件


构建.gradle

Empty file

RandomGenerator.java

package org.examples;

public interface RandomGenerator {

    String name();
    int generate();
}

默认随机生成器.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 文件


构建.gradle

Empty file

应用程序.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);
    }
}

最佳答案

How App.java is running perfectly fine without importing DefaultRandomGenerator class from SubProject-2

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

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

Why am I getting the error message "No candidates found for method call api" in build.grade file of Parent project (MultiProjectApp).

这是一个 IDE 问题,而不是 gradle 问题。如果你运行,它应该仍然有效。

在 Vscode 中运行它的示例 Example with vscode

关于java - java-library 插件的 api 配置无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61429559/

相关文章:

java - 如何让 Jlist 在添加新元素后自动向下滚动

java - Gradle - 更改 Java 编译器输出语言环境或编码

android - 如何将 Gradle 与 Apache Cordova 同步

groovy - 应用gradle插件有什么区别

Android Studio 2.2更新: aligned APK (zipAlign) not generated using the new Gradle Plugin 2. 2.0

java - 如何比较文本文件的每一行? java

java - 递归检查字符串是否平衡

java - HashSet<User>修改,而user只有最终值 'equals/hashcode'

java - IntelliJ 测试失败,Gradle 测试正常 : does not recognize JSON files in 'test/resources'

jdbc - DriverManager 在 gradle 自定义插件的任务中看不到依赖项