我有一个非常简单的用于测试目的的springboot应用程序。
这是我的身材。格拉德尔:
plugins {
id 'org.springframework.boot' version '2.1.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mandas:docker-client:2.0.2'
}
org。mandas:docker client:2.0.2
对组织具有可传递的依赖关系。玻璃鱼。运动衫核心:jersey客户端:2.28
。然而,gradle随后拉取版本2.27
,而不是2.28
。
如果我运行/gradlew dependencyInsight——依赖组织。玻璃鱼。运动衫core:jersey客户端
我得到以下输出:
org.glassfish.jersey.core:jersey-client:2.27 (selected by rule)
...
org.glassfish.jersey.core:jersey-client:2.27
\--- org.glassfish.jersey.connectors:jersey-apache-connector:2.27
\--- org.mandas:docker-client:2.0.2 (requested org.glassfish.jersey.connectors:jersey-apache-connector:2.28)
\--- compileClasspath
org.glassfish.jersey.core:jersey-client:2.28 -> 2.27
\--- org.mandas:docker-client:2.0.2
\--- compileClasspath
似乎springbootstarterweb
在某种程度上依赖于org。玻璃鱼。运动衫核心:jersey客户端:2.27
。但是,如果我使用打印所有依赖项/gradlew dependencies
我在组织上看不到依赖关系。玻璃鱼。运动衫核心:jersey客户端:2.27
来自spring boot starter web
。
然而,在网上搜索了一下,我发现了另一种追踪依赖性的方法:
grep -r "2.27" ~/.gradle/caches/modules-2/files-2.1/*
这样,我就能够追踪到版本2.27是在哪里引入的。似乎在以下POM中声明:
我现在的问题是多方面的:
sping-boo-starter-web
依赖于jersey
?我总是有这样的印象,如果我们想显式地使用jersey
而不是Spring
实现,我们将包括sping-boo-starter-jersey
。 sping-boo-starter-web
依赖于org.glassfish.jersey.core: jersey-Client: 2.27
运行./gradlew依赖项
。显然,当它降级版本时,一定有对它的依赖。泽西
。我知道这些是多个问题,但我认为最好是在一个问题中提问,而不是将它们分散在多个问题上,因为它们都与同一个上下文相关。
顺便说一句:这不仅仅发生在org上。玻璃鱼。运动衫核心:jersey客户端
。同样的事情也适用于org。阿帕奇。httpcomponents:httpclient
。
谢谢你的帮助!
首先,为什么sping-boo-starter-web
依赖于泽西?我总是有这样的印象,如果我们想显式地使用jersey
而不是Spring
实现,我们将包括sping-boo-starter-jersey
。
不是,而是取决于Tomcat。您正确地认为您需要jersey启动器来自动配置它。
为什么我看不到运行./gradlew依赖项
时依赖于
org.glassfish.jersey.core: jersey-Client: 2.27
。显然,当它降级版本时,一定有一个依赖它的地方。
因为它没有。下面有更多信息。
为什么2.28版降级到2.27版?我如何知道spring boot应用了哪种策略来选择特定的版本。
这是根本问题。我将在下面解释。
应用程序运行得非常好,但是现在我遇到了版本冲突,我应该如何最好地处理这个问题?使用v2是否可行。28而不是v2。27.我想这也是我第一次回答为什么spring boot会使用
jersey
。
视情况而定。根据我的经验,您的依赖关系可以通过升级和降级一个可传递的依赖关系来打破,与它们已经构建和测试过的依赖关系相比,即使它只是一个次要版本(我在看您,SnakeYAML!)所以你真的需要试一试。通常升级比降级更安全,但有时仍会导致问题。
这是关于泽西岛降级的交易。
Spring依赖项管理插件用于控制依赖项的版本,包括直接依赖项和可传递依赖项。
当您同时应用依赖项管理插件和Spring Boot插件时,后者将应用其默认版本,该版本来自Spring BootBOM。通过运行
gradle dependencyManagement
,您可以检查管理了哪些依赖项以及在哪些版本中。
所有这些的想法是,您可以得到一组相互之间工作良好的依赖关系。如果您喜欢其中一个托管依赖项的不同版本,则必须使用
dependencyManagement
扩展对其进行配置(如本文所述)。
这就是为什么您的Jersey依赖项会降级。
我个人不使用Spring依赖项管理插件,因为我喜欢在plain Gradle中处理依赖项的方式。所以我通常会这样做:
plugins {
id 'org.springframework.boot' version '2.1.0.RELEASE'
id 'java'
}
dependencies {
implementation platform("org.springframework.boot:spring-boot-dependencies:2.1.0.RELEASE")
}
在这种情况下,它将默认使用Spring Boot BOM中的依赖项,但如果有人需要更新版本,则不会降级。但是如果需要,它会升级它们,如果你不想的话,你也不必自己指定版本,在这种情况下,它会使用BOM中的版本。
我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们
我正在构建一个用于从云存储获取加密机密的库(在Scala中,使用Java客户端)。我正在使用以下google库: 一切都在本地正常工作,但是当我试图在Dataproc中运行我的代码时,我得到了以下错误: 我的代码中有问题的行是: 我在文档中看到,一些google库在Dataproc上可用(我使用的是图像版本为1.2.15的Spark集群)。但就我所见,GoogleAPI客户端的可传递依赖项与我在本
我们有一个Spring项目即将投入生产。目前,该项目正在使用ApacheHTTP客户端。有一种想法是将用作。 我正在四处挖掘,看看使用比使用有什么显著的优势。另外,了解HTTP传输在RestTemplate的实现中做了什么也很有趣。ApacheHTTP客户端已被多个团体使用多年,并享有良好的声誉。 我们是否会冒险转移到? 此外,本博客指出,RestTemplate需要针对生产进行配置,尽管配置是最
当我将此添加到我的项目父pom时: 项目运行失败如下: 当我删除依赖项时,项目将成功运行。 我只是想添加一个Eureka客户端到注册中心,但它不起作用。但是,当我使用Spring初始化器创建一个新项目时,它工作得很好。 每个答案都有帮助。 完整的项目如下:
Jersey 的创建、组装和安装都是使用 Apache Maven,非快照的 Jersey 都部署到了 Maven 中央库。他也部署在了Java.Net Maven repositories,包括带有快照的版本。当然如果要查看最新的版本也可以从 Java.Net Maven repositories 检出。 一个使用 Jersey 的应用,依赖于 Jersey 的模块,但是如果使用了第三方模块,那
我正在尝试创建RESTful web服务,但无法使删除生效,我不确定问题在哪里。我认为问题在客户端项目中,但也可能在服务器项目的资源类中。 我有一个使用这种方法的学生道课,我不认为这是一个问题,因为它适用于其他项目。 我有一个StudentResource类,它是我从包含这段代码的模式中创建的RESTful资源 然后,我创建了一个java项目,并使用此方法创建了名为OneStudent的RESTf