在gradle中排除重复的包

iyzzxitl  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个gradle构建,使用javafx,来自maven的log4j和来自本地flatDir(文件夹)中jar的jOpenDocument-1.5。

error: the unnamed module reads package org.w3c.dom from both jOpenDocument and java.xml
error: module javafx.graphicsEmpty reads package org.w3c.dom from both jOpenDocument and java.xml
error: module javafx.baseEmpty reads package org.w3c.dom from both jOpenDocument and java.xml
error: module org.apache.logging.log4j.core reads package org.w3c.dom from both jOpenDocument and java.xml
error: module javafx.controlsEmpty reads package org.w3c.dom from both jOpenDocument and java.xml
error: module jOpenDocument reads package org.w3c.dom from both java.xml and jOpenDocument

字符串
Gradle提供了一系列机制,这些机制应该允许我从构建中排除org.w3c.com包。Gradle希望我指定“组”和/或“模块”,但错误消息指定了“java包”,而不是组和模块名称。
我希望构建使用java.xml中的org.w3c.dom包,并从jOpenDocument中排除org.w3c.dom包。我选择了包的java.xml变体,因为jOpenDocument变体只有 org.w3c.dom.UserDataHandler.class,因此删除它应该会减少对其他依赖项的副作用。
Gradle构建扫描并没有深入到软件包级别的分析。它并没有告诉我任何我可以采取行动的东西。这可能是我的无知。
下面是我的build.gradle文件中的代码片段。它不工作可能是因为 org.w3c.dom 是一个而不是gradle/maven模块

dependencies {
    testImplementation 'org.testng:testng:7.4.0'

    implementation 'org.apache.logging.log4j:log4j-api:2.14.1'
    implementation 'org.apache.logging.log4j:log4j-core:2.14.1'

    implementation ('libs:jOpenDocument-1.5') {
        exclude module: 'org.w3c.dom'
    }

}


1.我应该如何修改build.gradle文件来解决这个重复的依赖关系?
1.如果Gradle构建依赖模块不是包,那么它是什么?

mkh04yzy

mkh04yzy1#

我手动删除了位于org/w3c/dom的**/org/w3c/dom/UserDataFile.class文件及其父文件夹(ZIP文件)。(谢谢@Slaw)
.工作完成.请注意,我还没有测试是否有任何功能的副作用.
最新版本(jOpenDocument-1.5.jar)不在Maven上。所以,我可以在本地平面目录存储库中手动编辑文件。我使用方舟来执行删除。这可能会改变-我看到已经提出了请求。我更喜欢使用Maven官方发布的版本,因为它们在长期内更容易维护。所以,在开发结束时,我将尝试增强我的
build.gradle文件,以编程方式执行此编辑,最有可能使用jar**命令,* 如@jewelsea所建议的,*
两个结束的想法,如果我可以。
1.我是第一次尝试测试驱动开发。TDD可能带来了这个问题,我认为这是一件好事。好处是我没有任何返工要做;所以TDD +1。
1.从jar中删除一个类是如此简单,我不禁觉得应该有一种传统的方法来指定在构建配置中排除特定的类或包。如果存在,它将在Gradle或Gradle插件手册中的某个地方记录;这将需要考古挖掘,时间和备用脑细胞。

相关问题