我与传递依赖有冲突。压倒一切、排除或强迫都无济于事。我还能做什么来把正确版本的库放入罐子?完整的代码dan be。发现https://github.com/geoHeil/gradle-dependency-resolution但它的主要部分描述如下。
正在执行
./gradlew shadowJar
禁用geomesa依赖项(拉入过时版本的typesafe/lightbend配置库)时:
dependencies {
compile "com.github.kxbmap:configs_2.11:0.4.4"
//compile "org.locationtech.geomesa:geomesa-hbase-spark-runtime_2.11:2.0.1"
}
执行jar
java -jar build/libs/gradleThing-all.jar
输出
hello
my config is: Success(Job1Configuration(frequencyCounting))
启用依赖项时:
./gradlew shadowJar
java -jar build/libs/gradleThing-all.jar
它失败了
hello
Exception in thread "main" java.lang.Exception: Failed to start. There is a problem with the configuration: Vector([extract] com.typesafe.config.Config.hasPathOrNull(Ljava/lang/String;)Z)
这与配置库的过时版本有关,如何解决typesafe配置上的NoSuchMethodError?。也可通过以下方式确认:
gradle dependencyInsight --dependency om.typesafe:config
> Task :dependencyInsight
com.typesafe:config:1.3.1 (conflict resolution)
variant "runtime" [
Requested attributes not found in the selected variant:
org.gradle.usage = java-api
]
\--- com.github.kxbmap:configs_2.11:0.4.4
\--- compileClasspath
com.typesafe:config:1.2.1 -> 1.3.1
variant "runtime" [
Requested attributes not found in the selected variant:
org.gradle.usage = java-api
]
+--- org.locationtech.geomesa:geomesa-convert-avro_2.11:2.0.1
| \--- org.locationtech.geomesa:geomesa-convert-all_2.11:2.0.1
| +--- org.locationtech.geomesa:geomesa-tools_2.11:2.0.1
| | \--- org.locationtech.geomesa:geomesa-hbase-spark-runtime_2.11:2.0.1
| | \--- compileClasspath
...
如何将可传递依赖项修复到所需的1.3.3版本?
正在尝试设置:
compile("org.locationtech.geomesa:geomesa-hbase-spark-runtime_2.11:2.0.1") {
exclude group: 'com.typesafe', module: 'config'
}
重新运行jar再次失败,出现同样的问题。
还有一个约束https://docs.gradle.org/current/userguide/managing_transitive_dependencies.html#sec:dependency_constraints像:
implementation("com.typesafe:config")
constraints {
implementation("com.typesafe:config:1.3.3") {
because 'previous versions miss a method https://stackoverflow.com/questions/40610816/how-to-resolve-nosuchmethoderror-on-typesafe-config'
}
}
或者使用武力https://docs.gradle.org/current/userguide/managing_transitive_dependencies.html#sec:enforcing_dependency_version比如:
implementation('com.typesafe:config:1.3.3') {
force = true
}
或者说:
configurations.all {
resolutionStrategy {
force 'com.typesafe:config:1.3.3'
}
}
没有给出正确的版本。
所有变体都会以相同的错误失败
什么是错的?必须有一种方法来强制期望的版本。
你遇到的问题和你描述的完全相反。
您在项目中尝试的不同东西都确保com.typesafe: config
的版本是1.3. x
。
但是,当添加org时。定位技术。geomesa:geomesa-hbase-spark-runtime_2.11:2.0.1
您引入了一些依赖项,这些依赖项已经包含com中的类。typesafe:config
但从1.2
行开始。当您创建fat jar时,该版本将覆盖1.3
行中的类。
这可以通过解压缩您的脂肪罐并运行:
$ javap com/typesafe/config/Config.class | grep hasPath
public abstract boolean hasPath(java.lang.String);
显示确实缺少hasPathOrNull
方法。
这一阴影问题在本文中有所暗示https://issues.apache.org/jira/browse/SPARK-9441.
有鉴于此,如果可能的话,简单的方法是将com.github.kxbmap:configs_2.11
降级为依赖com.typesafe:config:1.2.x
另一个解决方案是找出到底是哪个脂肪罐包含了这些,看看你是否能从你自己的脂肪罐中排除它。
我无法使用Gradle强制生成依赖项的版本。我的目标是使用0.20.0版本。发布了Spring HATEOAS库的,但尽管我付出了所有的努力,它仍然解析为0.19.0。释放。 我尝试了许多策略,包括孤立的策略和相互结合的策略。这些策略包括但可能不限于以下策略(请注意,在所有情况下都在文件中定义,该文件位于声明Spring HATEOAS依赖项的模块目录的父目录中): #1(在声明依赖关系的模块的b
一些stackoverflow帖子暗示我的类路径中有spring-asm的冲突版本。通过gradle依赖分析,我看到我没有spring-asm的多个版本,但我有spring-core的多个版本(版本3.1.4和5.0.2) 我试图排除3.1.4版本,但无法使其工作。我试图在依赖级别和配置级别都排除它。 即使有了上述更改,我仍然在依赖分析输出中发现Spring-Core:3.1.4.Release。
渐变-泊坞插件和Spring靴版本 2.0.0.M4 M4 使用较新的客户端,并且使用 docker 插件以异常结尾,存在一个问题: 我的主项目中的构建脚本: 如您所见,我们加载spring-boot-gradle-plugin version=2.0.0。M4及其所有依赖项。 我的子项目构建:gradle: 最重要的是,docker.gradle文件与子项目的build.gradle文件位于同一
问题内容: 我使用以下两个依赖项: 两者必须为同一版本才能正常工作。由于我的其他依赖项使用更高的版本,因此Gradle为每个依赖项使用不同的版本。 我通过运行发现了这一点: 如何强制Gradle为这两个依赖项设置相同的版本? 问题答案: 您的依赖项之一是强制更新番石榴版本。使用以定位库驱逐你的版本。 您遇到的问题是,如果您强迫它使用14.0.1,则另一个库可能无法正常工作。您是否可以仅使用17.0
我使用以下两个依赖项: 两者必须是相同的版本才能正常工作。由于我的其他依赖项使用更高的版本,Gradle为每个依赖项使用不同的版本。 我通过运行找到了这一点: 如何强制Gradle为这两个依赖项设置相同的版本?
在php 5.1中, 扩展之间的内部依赖是可以强制性的. 由于扩展可以静态构建到php中, 也可以构建为共享对象动态加载, 因此强制依赖需要在两个地方实现. 配置时模块依赖 第一个位置是你在本章课程中刚刚看到的config.m4文件中. 你可以使用PHP_ADD_EXTENSION_DEP(extname, depname[ , optional])宏标识extname这个扩展依赖于depname