簡體   English   中英

如何在 Java/Gradle 中訪問依賴項的依賴項?

[英]How to access a dependency of a dependency in Java/Gradle?

我正在嘗試訪問在我實現的庫中實現的庫。 我擁有這兩個庫。 IE:

Lib1有一個我想在消費者應用程序中訪問的類,比如Car.java

public class Car {
    public Int wheelsCount;
}

Lib2有一個 api,它從 lib1 返回類Car

gradle.build:

...
api 'com.me.lib1:1.0' //From maven central (not currently live)
import com.lib1.Car

interface MyApi {
    public Car getCar();
}

消費者的gradle.build: implementation 'com.me.lib2:1.0'

MyApi api = getMyApi()
api.getCar() // Error

無法訪問類“com.lib1.Car”。 檢查您的模塊類路徑是否缺少或沖突的依賴項

問題:有沒有辦法使用 gradle 做到這一點?

我不確定你在問什么。 這是一個我認為應該大致做你所說的例子?


我們有一個包含 3 個子項目的 gradle 項目, cargarageapp cargarage提供庫,而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();
}

garagecar項目的消費者,並提供了一種獲得Car的方法。 所以我們需要像這樣聲明一個:carapi依賴:

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

最后,我們有我們的應用程序,它只需要一個對garageimplementation依賴來使用它和一個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整個gradle :app:run ,它應該給我們以下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+ 模塊系統,還有一些額外的步驟,但這超出了我認為的這個問題的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM