api java-库插件的配置无法识别
api configuration of java-library plugin is not recognized
我是 Gradle 的新手,我正在使用 Gradle 6.1.
我正在编写小型应用程序以了解多项目应用程序和 Java-Gradle.
的库插件的概念
我的问题是:
如何在不从 SubProject-2
导入 DefaultRandomGenerator class 的情况下 App.java 运行 完美无缺
为什么我在父项目 (MultiProjectApp) 的 build.grade 文件中收到错误消息 "No candidates found for method call 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"
}
}
SubProject-2 文件
build.gradle
Empty file
RandomGenerator.java
package org.examples;
public interface RandomGenerator {
String name();
int generate();
}
默认RandomGenerator.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);
}
}
How App.java is running perfectly fine without importing
DefaultRandomGenerator class from SubProject-2
之所以有效,是因为它们都在同一个包中 (org.examples
)。
请注意,如果使用 Java 9 中引入的新模块系统,这将不起作用。因为这两个项目被认为是 "split",您将需要各种 hack 来让它工作。
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 中 运行 的示例
我是 Gradle 的新手,我正在使用 Gradle 6.1.
我正在编写小型应用程序以了解多项目应用程序和 Java-Gradle.
我的问题是:
如何在不从 SubProject-2
导入 DefaultRandomGenerator class 的情况下 App.java 运行 完美无缺
为什么我在父项目 (MultiProjectApp) 的 build.grade 文件中收到错误消息 "No candidates found for method call 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"
}
}
SubProject-2 文件
build.gradle
Empty file
RandomGenerator.java
package org.examples;
public interface RandomGenerator {
String name();
int generate();
}
默认RandomGenerator.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);
}
}
How App.java is running perfectly fine without importing DefaultRandomGenerator class from SubProject-2
之所以有效,是因为它们都在同一个包中 (org.examples
)。
请注意,如果使用 Java 9 中引入的新模块系统,这将不起作用。因为这两个项目被认为是 "split",您将需要各种 hack 来让它工作。
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 中 运行 的示例