问题标签 [transitive-dependency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
384 浏览

tomcat - 为什么传递依赖不包括我的最后一战?

这里发布了一些类似的问题但那里没有答案。

我有多模块 Maven 项目

当我跑步时mvn dependency:tree,我看到以下内容

在 pom.xml 中没有进行任何其他排除任何库的配置。在我的决赛中war/WEB-INF/lib

我看到了commons-codec-1.6.jar,,,commons-httpclient-3.1.jarhttpclient-4.3.2.jar但我没有看到commons-codec-1.2.jar。这是为什么?

0 投票
0 回答
568 浏览

maven - 如何防止来自测试范围依赖项的传递依赖项被打包到 Maven 的 WAR 中?

我正在使用 Maven 3.2.3。在我的 pom 中,我有这个测试依赖项

但是,我注意到 Maven 引入了 test-jar 所依赖的 JAR 文件作为编译时间。下面是 mvn 依赖的摘录:tree ...</p>

如果 Maven 包含在测试范围的依赖项中,如何抑制 Maven 将依赖项编译到我的 WAR 中?

编辑根据评论,下面是 mvn depdency:tree 的完整输出

0 投票
0 回答
276 浏览

android - 传递依赖不起作用,android项目在转换为maven后不会运行

我正在尝试在我的 android 项目中使用 maven 依赖管理。我正在使用以下

我有一个 classes.jar 包,我使用它转换成一个 Maven 工件

上面命令引用的包含的 pom.xml 看起来像这样

一旦我将工件部署在我的私有本地 maven 存储库(在我的系统上名为test-maven-repo),我创建一个新的 android 项目(测试它在我的 android 设备上运行)并将其转换为 maven

转换为 Maven

并使用创建我的 POM 文件 在此处输入图像描述

这就是事情开始出错的地方

问题 1 当我单击Convert to Maven Project时,构建系统启动,我在控制台中注意到了这一点

当我尝试运行我的应用程序时,我在我的 logcat 中获得了以下堆栈跟踪

注意:我测试它与 Eclipse Luna 一起工作,但我猜我更新到 android-m2e 插件 v1.6 后,问题 1 再次出现。

问题 2 使用 Eclipse Luna 和 android-m2e 插件 v1.5,我的项目可以工作,因为它可以在我的 android 设备中编译和运行。但是,这次只有我引用的 maven 工件作为依赖项下载,我的工件所依赖的传递依赖项(也在它自己的 pom.xml 文件中引用)不会从我的测试存储库中自行下载。

我的项目的 pom.xml 如下所示(repo 托管在服务器上,代码中的链接)

我只在我的 Maven 依赖项部分下获取 test.jar。没有我的 test.jar 所依赖的 OkHttp.jar 或 okio.jar(应该从 maven Central 传递) NOTE1:我已经尝试将 maven Central 与我的私有 test-maven-repo 一起添加。

注意 2:当我在带有 gradle 的 Android Studio 中使用 maven repo 时,一切都像黄油一样工作。

问题 :

  • 在 Eclipse 的 android 项目中使用 maven 依赖管理我的设置是否错误?
  • 我在这里做错了什么?
  • 是 Maven 版本/m2e-android 插件/eclipse 版本还是我使用这三个版本的组合来执行依赖管理?
0 投票
1 回答
767 浏览

eclipse - Maven eclipse 插件,排除传递依赖

关于 Maven 和传递依赖排除有几个问题。但是,我没有得到它的工作。我的 pom 中有一些依赖项,它们重新打包了一些库,以减小 pom 的大小。到目前为止,这是成功的。但是当我运行mvn eclipse:eclipse这些传递依赖项时,它们会被写入.classpath文件中。即使它们被排除在以下摘录中。

阿帕奇 Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37+02:00)

Java 版本:1.7.0_45,供应商:甲骨文公司

0 投票
2 回答
2943 浏览

gradle - 不要在 Gradle 中使用来自传递依赖的更高版本的库

在我使用的 Android 项目中

我需要 2.2.0 版中的 okhttp 才能使我的代码正常工作。但是当我添加时我遇到了问题

因为在 intercom-sdk 内部对于更高版本再次存在 okhttp 依赖项:

这导致我的代码使用更高版本的 2.4.0 而不是我想要的 2.2.0。请问有什么方法可以在我的模块中使用我指定的 2.2.0 并让对讲机使用它的 2.4.0?

0 投票
2 回答
592 浏览

gradle - Gradle 在排除所有传递依赖时排除自我

我遇到了一个我无法解决的特定问题,如果有任何帮助,我将不胜感激。最初,我在我的 Java 项目中包含了一些 jar 依赖项作为仅工件依赖项。如下所示:

到目前为止,一切都很好。我们称这个项目为“A”。我已经将项目 A 包含在另一个 Java 项目 B 中,再次使用 gradle。我注意到使用 maven-publish 发布的 A 在 B 中使用它时并没有在其 pom 文件中排除其所有传递依赖项。

所以我开始使用传递标志:

这确保了在项目 B 中,我在使用 eclipse 插件和 gradle 本身时排除了 A 的所有传递部门。

但是,已发布的 pom.xml 中缺少排除的问题仍然存在。然后我发现这个问题似乎在撰写本文时和我的 gradle 版本中已经解决:GRADLE-2945

所以我尝试了以下方法:

根据maven doc ,pom 文件现在正确地具有传递依赖项的所需排除规则:

然而,这会导致一系列不同的问题;当以这种方式包含 A 时,使用 compileJava 任务时 eclipse 和 gradle 本身都不能编译项目 B 中的任何代码。连同它的传递依赖,A 本身也消失了。

奇怪的是,根据依赖项任务,它是编译类路径的一部分。

我正在使用带有 eclipse 4.41 的 JRE7 和 gradle 2.3,我们使用 nexus 作为内部 maven 存储库。

我希望我不需要使用传递标志并通过添加所需的排除来手动操作生成的 pom 文件。


使用 dbcp 作为项目 A 重现问题的示例项目:

主.java:

构建.gradle:

0 投票
1 回答
797 浏览

scala - 如何使用 SBT 帮助我的库解决传递依赖冲突

假设我正在编写一个 Scala 库 L,它依赖于某个依赖项 D,并由一个程序 P 和另一个程序 Q 使用。P 直接依赖于 D 的 3.2 版,而 Q 直接依赖于 3.3 版。

在这两个版本之间,D 的 API 被打乱,以便获得我在 L 中使用的相同函数,我必须在 L 中编写不同的导入语句。同样,P 依赖于 3.2 特定的行为,而 Q 依赖于 3.3 特定的行为。

现在,通常会发生的是,在编译 P 和 Q 时将选择 D 的最新版本,但这将导致如果 L 依赖于库的 3.3 版,则 P 中断,或者如果 L 依赖于编译 Q,则 L 在编译 Q 时中断在 D 的 3.2 版上。

理想情况下,我希望 P 和 Q 都使用相同版本的 L,因为 L 的公共 API 不会改变。这可能吗?

想到的一般方法是基于依赖解析的L的条件编译。尽管在 JVM 世界中这似乎是无法实现的,因为我们不会传递地编译项目的依赖项,而是依赖于预编译的工件。

如果 D 是 Scala 本身,我现在可以使用 SBT 执行此操作(即与不同的 Scala 版本进行交叉编译,并将特定于版本的代码存在于自己的目录中),但从依赖解析的角度来看,这是一种 hack,因为 SBT 发生了变化工件的名称以允许此交叉编译工作。

0 投票
2 回答
869 浏览

gradle - 禁用所有期望 compile project(...) 的传递依赖项

是否可以将休眠配置为仅从我依赖的项目中获取传递依赖项(compile(“foobar”))并禁用其他所有项目的传递性?这就是我到目前为止所尝试的:

它不起作用。根本没有传递依赖关系。

按照建议更新 1

虽然不考虑来自 foobar 的依赖关系:

更新 2

以下解决方案现在对我有用:

0 投票
1 回答
81 浏览

gradle - Gradle Sub 传递依赖排除

我有三个 Gradle 模块:ModA 和 ModB 和 ModC

ModA 依赖于 ModB 和 Spring Web MVC 3.2.6

ModB 依赖于 ModC

ModC 依赖于 Spring Web MVC 4.1.5

我遇到了很多错误,因为 ModA 正在引入并使用 Spring 4.1.5 而不是 3.2.6。由于版本差异和时间,我现在无法将 ModA 更新到 Spring 4.1.5。我想要做的是从 ModA Gradle 文件中的 ModB 依赖项中排除 Spring 4.1.5,这样只有 3.2.6 被拉入并使用;但是,我尝试过的一切都没有排除依赖。

不工作:ModA build.gradle:

那么,如何从依赖项的依赖项中排除模块?如果这是我应该做的,为什么它不起作用?

0 投票
2 回答
306 浏览

java - NoSuchMethodException - 方法的返回类型已更改 - 希望同时接受这两种类型

背景

我有一个必须更新的公共库。这个公共库有一个第三方依赖(jgroups),它在新版本中发生了显着变化。通过传递依赖,有时需要更新版本的 jgroups,这会破坏公共库。我需要更新一些类以兼容新版本,同时保持向后兼容性。

问题

JGroups 提供了一个View类,它有一个方法getMembers()。在旧版本 (2.10.0) 中,此方法返回Vector<Address>,而在较新版本 (3.2.7) 中,此方法返回List<Address>. 的任何实现java.util.Collection都对我有用,但问题是我得到了一个NoSuchMethodException. 据我了解,getMembers()找到的方法具有旧的Vector<Address>返回类型(基于公共库中的 JGroups 依赖项),但我正在拖入较新的 JGroups 版本,并且View该类期望List<Address>从该getMembers()方法返回。

堆栈跟踪

在 Eclipse 中启动我的应用程序时出现以下错误。

哪里断了

问题

是否可以支持这两个版本,即使它们是不同的实现Collection?我该如何处理这种直到运行时才知道方法返回类型的场景?

笔记:

我试图通过在我的 maven pom.xml 中添加排除项来排除正在引入的旧版本的 JGroups。这没有奏效。