どのようにJavaの/のGradleで依存関係の依存関係にアクセスするには?

ジョンSardinha:

私は私が実装することをライブラリに実装されたライブラリにアクセスしようとしています。私は、これらのライブラリの両方を所有しています。すなわち:

LIB1は、私は消費者のアプリでアクセスしたい特定のクラスを持っている、と言いますCar.java

public class Car {
    public Int wheelsCount;
}

LIB2はクラスを返すAPIがあるCarLIB1からの:

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のプロジェクトを持っているcargarageappcarそして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秒。だから私たちは宣言する必要がapi上の依存関係を:carこのように:

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+モジュールシステムを使用している場合はそこにいくつかの追加の手順がありますが、これは私が考えるこの質問の範囲を超えだろう。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=477309&siteId=1
おすすめ