我不确定你在问什么。这里有一个例子,我认为大致上可以做到你所说的内容?
我们有一个Gradle项目,其中包含3个子项目:
car
、
garage
和
app
。
car
和
garage
提供库,而
app
是我们的应用程序。除了这些目录外,根目录只包含一个名为
settings.gradle
的文件,并且其内容如下:
rootProject.name = 'example'
include 'car', 'garage', 'app'
继续往下,我们有一个名为
car
的项目,它提供了一个接口。它的
build.gradle
如下所示:
plugins {
id 'java-library'
}
除此之外,它只包含我们的接口在src/main/java/car/Car.java
中:
package car;
public interface Car {
void drive();
}
garage
是car
项目的消费者,提供了获取新的Car
的方法。因此,我们需要像这样声明对:car
的api
依赖:
plugins {
id 'java-library'
}
dependencies {
api project(':car')
}
Garage
类本身看起来像这样(在src/main/java/garage/Garage.java
下):
package garage;
import car.Car;
public class Garage {
public Car getCar() {
return () -> { System.out.println("Hello World!"); };
}
}
最后,我们有了一个应用程序,它只需要在 implementation
中添加对 garage
的依赖以使用它并使用 JavaExec
任务来运行它:
plugins {
id 'java'
}
dependencies {
implementation project(':garage')
}
task run(type: JavaExec) {
main = 'app.Main'
classpath = sourceSets.main.runtimeClasspath
}
实际的实现再次转到 src/main/java/app/Main.java
:
package app;
import garage.Garage;
public class Main {
public static void main(String[] args) {
Garage g = new Garage();
g.getCar().drive();
}
}
现在我们可以通过
gradle :app:run
来运行整个程序,这将给我们输出以下内容:
> Task :app:run
Hello World!
BUILD SUCCESSFUL in 506ms
6 actionable tasks: 1 executed, 5 up-to-date
<-------------> 0% WAITING
> IDLE
所以,正如您所看到的,除了您已经说明的事情之外,您不需要做任何特殊的事情。这是假设您正在使用类路径。如果您正在使用Java 9+模块系统,则还有一些额外的步骤,但我认为这超出了本问题的范围。
gradle.build
中的lib2
吗? - Alexey Romanov