我正在与gradle和两个独立的项目一起工作,其中一个项目将是我想编译为可实现的JAR中的库,可以在另一个项目(APP(中使用它以及其他项目。
在我的库中,我依靠Java启动和一些Google库。我需要在库的gradle文件中指定什么,这些库上的Java启动和其他库未汇编成该罐子,以吹大其尺寸?
我实施我的库罐的应用程序应该提供这些库。在这种情况下,我需要在我的应用程序的Gradle文件中指定任何特定的内容吗?
您可以将库项目的依赖项定义为 compileOnly
:
dependencies {
compileOnly group: 'com.google.guava', name: 'guava', version: '27.0-jre'
}
这样,您的依赖性将不会出口,也不会包装到任何文物中。
如果您在测试中需要此依赖项,也需要在testImplementation
配置中。
来自您问题的这一部分:
[...] Java靴子和其他库未被编译到该罐子中炸毁其大小。
我了解您已将Springboot插件应用于库(默认情况下会产生一个胖罐子,其中包括所有依赖项(,而您只想创建一个简单/普通的Java库。
如果我的假设是正确的,那么最简单的解决方案是仅将Springboot插件用于依赖项管理,而无需将其实际应用于您的项目。
您还应该应用Gradle Java库插件,以受益于API/实现分离功能。
图书馆项目的示例构建脚本:
plugins {
id "java-library"
id "org.springframework.boot" version "2.1.4.RELEASE" apply false // do not apply it
}
apply plugin: "io.spring.dependency-management"
dependencies {
// Spring Boot deps
implementation "org.springframework.boot:spring-boot-starter-web"
// libraries you want to "propagate to consumers
// api group: 'com.google.guava', name: 'guava', version: '23.0'
// libraries you don"t want to flow in consumers projects
// implementation ....
// Test deps
testImplementation "org.springframework.boot:spring-boot-starter-test"
}
dependencyManagement {
imports {
mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
}
}