我有一个库项目,我用它来为我的其他项目保存一些设置,这些项目有很多实用程序分类,也包括实用程序库。因此,我将库的build.gradle中的所有“实现”调用都改为“API”调用,这样我就不需要一次又一次地重新导入依赖项。在构建库并将jar从我的library文件夹移动到主项目中的lib文件夹后,我可以访问库中的所有类,但是传递依赖项在主项目中不可用。
我还尝试使用实现和transivive=true,但没有成功。
我使用的是AdoptopenJDK16和Gradle7.0,并且我已经尝试在清理缓存后重建所有内容。
图书馆建筑
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
}
plugins {
id 'java-library'
id 'idea'
id 'org.springframework.boot' version '2.5.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
group = 'com.mygroup'
archivesBaseName = 'utilities'
version = '1.0.2'
bootJar {
enabled = false
}
jar {
enabled = true
}
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
// Spring
api('org.springframework.boot:spring-boot-starter-web')
api('org.springframework.boot:spring-boot-starter-validation')
api('org.springframework.boot:spring-boot-starter-logging')
api('org.springframework.boot:spring-boot-starter-log4j2')
api('org.springframework.boot:spring-boot-starter-test')
api('io.springfox:springfox-boot-starter:3.0.0')
// Utilities
api('io.sentry:sentry-spring:4.3.0')
api('joda-time:joda-time:2.10.10')
api('commons-codec:commons-codec:1.15')
api('org.apache.commons:commons-lang3:3.12.0')
api('org.apache.commons:commons-csv:1.8')
api('org.apache.commons:commons-math3:3.6.1')
api('org.projectlombok:lombok:1.18.20')
api('org.springframework.boot:spring-boot-configuration-processor')
// Annotation Processor
annotationProcessor('org.projectlombok:lombok:1.18.20')
annotationProcessor('org.springframework.boot:spring-boot-configuration-processor')
// Tests
testAnnotationProcessor('org.projectlombok:lombok:1.18.20')
testAnnotationProcessor('org.springframework.boot:spring-boot-starter-test')
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
test {
useJUnitPlatform()
systemProperties = System.properties as Map<String, ?>
}
应用程序的构建
buildscript {
repositories {
mavenLocal()
mavenCentral()
maven {
url 'https://plugins.gradle.org/m2/'
}
}
}
plugins {
id 'java'
id 'idea'
id 'org.springframework.boot' version '2.5.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
group = 'com.mygroup'
archivesBaseName = 'application'
version = '1.0.2'
bootJar {
enabled = true
}
jar {
enabled = false
}
repositories {
mavenLocal()
mavenCentral()
flatDir dirs: 'lib'
}
dependencies {
// Local
implementation('com.mygroup:utilities:1.0.2')
testImplementation('com.mygroup:utilities:1.0.2')
annotationProcessor('com.mygroup:utilities:1.0.2')
testAnnotationProcessor('com.mygroup:utilities:1.0.2')
// Additional dependencies
implementation('org.springframework.boot:spring-boot-starter-data-mongodb')
implementation('com.graphql-java:graphql-spring-boot-starter:5.0.2')
implementation('com.graphql-java:graphiql-spring-boot-starter:5.0.2')
implementation('com.graphql-java:graphql-java-tools:5.2.4')
}
test {
useJUnitPlatform()
systemProperties = System.properties as Map<String, ?>
}
JAR中没有包含有关传递依赖项的信息。当您通过Maven或Gradle将库发布到存储库时,需要发布几个文件:
当您只是将库jar复制到lib
目录时,您的应用程序没有关于它的依赖项的信息。有几种解决方案:
>
将库发布到Maven存储库(Sonatype Nexus或JFrog Artifactory是最流行的用于设置自承载存储库的产品,但您也可以使用Mavenlocal()
)而不是将jar复制到lib
-我认为这是最好的解决方案
将库构建为fatJar(带有编译代码和所有依赖项的jar文件-在Gradle中创建一个Fat jar)
我的项目有一些依赖项(真的很多),我正在依赖项中添加它们。但是我不想要任何传递依赖项,这将超出我的控制范围(maven给我带来了几乎三倍于我需要的东西)。我试图通过以下方式禁止传递依赖项: 但是在我做了一个mvn包之后,传递依赖项仍然被下载并添加到我构建的包中。这是maven的日志记录: 所以这不是我想要的。我想要maven不要自动下载传递依赖项,或者不要将它们添加到我的“mvn包”中。 感谢任何
一些stackoverflow帖子暗示我的类路径中有spring-asm的冲突版本。通过gradle依赖分析,我看到我没有spring-asm的多个版本,但我有spring-core的多个版本(版本3.1.4和5.0.2) 我试图排除3.1.4版本,但无法使其工作。我试图在依赖级别和配置级别都排除它。 即使有了上述更改,我仍然在依赖分析输出中发现Spring-Core:3.1.4.Release。
在我的另一个工作区,对于我现有的项目,我没有这个问题。 有办法解决吗?
在应用中,您希望使用不同的类来处理不同的任务以保持代码的简洁。我们把这些类称为 依赖。如何将这些依赖关系传递给将在后台任务调用的方法呢? 当您在后台任务中调用静态方法时,仅限于应用程序的静态上下文,这需要您使用以下获取依赖关系的模式: 通过 new 手动实例化依赖 服务定位器模式 抽象工厂模式 或 建设者模式 单例模式 然而,所有这些模式使您的应用程序的单元可测试性方面变得非常复杂。为了解决这个问
我给ivy添加了一个依赖项(我们称之为a)。在maven central中具有pom文件的xml。Ivy使用ibiblio来解析maven依赖项。添加到常春藤中的依赖项(A)。xml具有可传递依赖项(B)。到目前为止,一切都很好。传递依赖(B)的依赖(C)不能用常春藤来解决。 我在常春藤上定义了一个新的名字。如下所示的xml: 在B的pom文件中,C在编译和测试范围中定义如下: 当我在ivy的缓存