当前位置: 首页 > 知识库问答 >
问题:

同名Android gradle模块

秦博延
2023-03-14

我正在开发一个使用以下依赖项的Android项目:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.17</version>
    </dependency>

但是,此依赖项有2个模块javax/注入的定义,如gradle依赖项树中所示:

 +--- org.glassfish.jersey.core:jersey-client:2.17
 |    +--- org.glassfish.jersey.core:jersey-common:2.17
 |    |    +--- org.glassfish.hk2:hk2-api:2.4.0-b10
 |    |    |    +--- javax.inject:javax.inject:1
 |    |    +--- org.glassfish.hk2.external:javax.inject:2.4.0-b10

当尝试运行Android应用程序时,我收到错误:

com.android.dex.DexException: Multiple dex files define L/javax/inject/Inject

我尝试排除这些模块中的任何一个,但这不起作用,因为依赖项依赖于它们来进行方法调用。

有没有其他解决方案来解决这一冲突?

共有1个答案

商弘义
2023-03-14

我正在使用gradle,有同样的问题,并根据这个答案解决了它

compile ('org.glassfish.jersey.containers:jersey-container-servlet:2.14'){
    exclude module: 'javax.inject'
}
compile 'org.glassfish.hk2.external:javax.inject:2.4.0-b06'
 类似资料:
  • 我们已经讲到了如何使用模块名称作为调用的一部分,来调用模块中的函数,如示例 7-7 中所示的 nested_modules 函数调用。 文件名: src/main.rs 示例 7-7:通过完全指定模块中的路径来调用函数 如你所见,指定函数的完全限定名称可能会非常冗长。所幸 Rust 有一个关键字使得这些调用显得更简洁。 Rust 的 use 关键字能将你想要调用的函数所在的模块引入到当前作用域中,

  • 目录结构 成功编译并生成out/calc-module目录。 模块-info.java

  • 为了在我们的JUnit测试中使用H2数据库而不是调用Oracle,我被阻止在H2上创建别名以模拟一些Oracle兼容性: > 我首先为日期到字符的转换声明了to_char的别名:可以

  • 问题内容: 假设我有一个包含模块的软件包: 并且这些模块需要引用彼此包含的功能。似乎我的模块遇到了问题,因为有一个同名的标准模块。 例如,在我的模块同时需要我和标准python 模块的情况下,我会遇到麻烦,因为解释器会在程序包内部查找并找到我的模块,然后再遇到标准模块。 有没有办法解决?这是不可以的情况,并且模块名称不能重复使用吗? 有关封装哲学的任何解决方案和意见在这里都将很有用。 问题答案:

  • 问题内容: 在模块路径上是否可以有两个名称完全相同(但内容稍有不同)的模块? 据我所知,Java 9编译器没有对此抱怨。我有2个模块声明如下: 两者都包含包装,但包装内的内容不同。然后在我的主应用程序中,我希望导入此模块: 具有相同名称的两个模块都在我的模块路径上。 我希望在编译模块时,编译器会抱怨同一模块存在两次,但事实并非如此。这是否有效地意味着您可以在模块路径上使用同一jar的2个版本,而J

  • 我有一个类,比如说,我想用Jackson从JSON中填充它,但是属性名因源而异。下面是代码当前的外观: 正如您所看到的,和在结构上是相同的,但我需要不同的子类来指定不同的属性名称。 是否有一些方法可以在不需要重新声明和重新实现每个方法的样板的情况下强制执行模型?