gradle java library_Gradle 依赖关系中 compile和 implementation的区别

将在一个项目中展示implementation,api以及compile之间的差异。

假设我有一个包含三个Gradle模块的项目:

app(Android应用)

my-android-library(Android库)

my-java-library(Java库)

app具有my-android-library与依赖。my-android-library具有my-java-library依赖。

依赖1

my-java-library有一个MySecret班

public class MySecret {

public static String getSecret() {

return "Money";

}

}

my-android-library 拥有一个类 MyAndroidComponent,里面有调用 MySecret 类的值。

public class MyAndroidComponent {

private static String component = MySecret.getSecret();

public static String getComponent() {

return "My component: " + component;

}

}

最后,app 只对来自 my-android-library

TextView tvHelloWorld = findViewById(R.id.tv_hello_world);

tvHelloWorld.setText(MyAndroidComponent.getComponent());

现在,让我们谈谈依赖性...

app需要:my-android-library库,所以在app build.gradle文件中使用implementation。

(注意:您也可以使用api/compile, 但是请稍等片刻。)

dependencies {

implementation project(':my-android-library')

}

依赖2

您认为 my-android-library 的 build.gradle应该是什么样?我们应该使用哪个范围?

我们有三种选择:

dependencies {

// 选择 #1

implementation project(':my-java-library')

// 选择 #2

compile project(':my-java-library')

// 选择 #3

api project(':my-java-library')

}

依赖3

它们之间有什么区别,我应该使用什么?

compile 或 api(选项#2或#3)

依赖4

如果您使用 compile 或 api。我们的 Android 应用程序现在可以访问 MyAndroidComponent 依赖项,它是一个MySecret 类。

TextView textView = findViewById(R.id.text_view);

textView.setText(MyAndroidComponent.getComponent());

// 你可以访问 MySecret

textView.setText(MySecret.getSecret());

implementation(选项1)

依赖5

如果您使用的是 implementation 配置,MySecret 则不会公开。

TextView textView = findViewById(R.id.text_view);

textView.setText(MyAndroidComponent.getComponent());

// 你无法访问 MySecret 类

textView.setText(MySecret.getSecret()); // 无法编译的

那么,您应该选择哪种配置?取决于您的要求。

如果要公开依赖项,请使用 api 或 compile。

如果您不想公开依赖项(隐藏您的内部模块),请使用implementation。

注意:

这只是 Gradle 配置的要点,请参阅表49.1 Java库插件-用于声明依赖的配置,有更详细的说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值