конфигурация api плагина java-библиотеки не распознается
Я новичок в Gradle, и я использую Gradle 6.1.
Я пишу небольшое приложение, чтобы понять концепции многопроектного приложения и плагина Java-библиотеки Gradle.
Мой вопрос:
Как App.java отлично работает без импорта класса DefaultRandomGenerator из SubProject-2
Почему я получаю сообщение об ошибке "Не найдено кандидатов для api вызова метода" в файле build.grade родительского проекта (MultiProjectApp).
Ниже приведен код моего приложения:
Файлы родительского проекта (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"
}
}
Файлы Субпроекта-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);
}
}
Файлы Субпроекта-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);
}
}
1 ответ
Как App.java отлично работает без импорта класса DefaultRandomGenerator из SubProject-2
Это работает, потому что они оба находятся в одном пакете (org.examples
).
Обратите внимание, что это не сработает при использовании новой модульной системы, представленной в Java 9. Поскольку два проекта считаются "разделенными", вам потребуются различные приемы, чтобы заставить их работать.
Почему я получаю сообщение об ошибке "Не найдено кандидатов для вызова метода api" в файле build.grade родительского проекта (MultiProjectApp).
Это проблема IDE, а не проблема градиента. Если вы запустите, он все равно должен работать.