Grade重复依赖解决方案-compileOnly

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangty0223/article/details/78274396

原文出处:https://dzone.com/articles/gradle-compile-only-dependencies?utm_source=tuicool&utm_medium=referral

最受欢迎的Gradle功能之一刚刚到达了2.12版:支持声明只编译依赖关系。对于熟悉Maven的Java开发人员,只有编译的依赖关系与Maven的provided范围相似,只允许在编译时使用非传递依赖关系。尽管Gradle War Plugin的用户可以使用类似的功能,但现在可以使用Java Plugin为所有Java项目声明编译依赖关系。

仅编译依赖关系解决了一些用例,包括:

在编译时所需的依赖关系,但在运行时不需要,例如仅源代码注解或注释处理器;
在编译时所需的依赖关系,但在运行时仅在使用某些功能时才需要,也称为可选依赖项;
在编译时需要其API,但其实现由消费库,应用程序或运行时环境提供的依赖关系。
仅编译依赖关系与常规compile依赖关系明显不同。它们不包含在运行时类路径中,它们是非传递性的,意味着它们不包括在依赖项目中。当使用Gradle项目依赖关系以及发布到Maven或Ivy存储库时,这一点是正确的。在后一种情况下,只有从已发布的元数据中省略编译依赖关系。

作为我们对质量IDE支持的承诺的一部分,只有依赖编译才能继续使用Gradle的IDEA和Eclipse插件。在IntelliJ IDEA中使用时,仅编译依赖关系映射到IDEA自己的provided作用域。在Eclipse中,仅编译依赖关系不会通过项目依赖关系导出。

在Gradle模型中,我们认为测试是生产代码的“消费者”。考虑到这一点,只有编译依赖关系不会被测试类路径继承。意图是,像任何其他运行时环境一样,测试应该以嘲笑或其他依赖的形式提供自己的实现。

声明只编译依赖关系很简单 - 只需compileOnly为相应源集合的新配置分配依赖关系:

dependencies {
compileOnly ‘javax.servlet:servlet-api:2.5’
}
作为配置的结果compileOnly,compile配置不再代表所有编译时依赖关系的完整画面。当需要在构建脚本或自定义插件中引用编译类路径时,compileClasspath应使用相应的源集合的属性。

猜你喜欢

转载自blog.csdn.net/zhangty0223/article/details/78274396