gpt4 book ai didi

java - 我可以使用 Gradle 强制确定类路径中依赖项的顺序吗?

转载 作者:行者123 更新时间:2023-12-02 01:41:45 26 4
gpt4 key购买 nike

项目在 Google App Engine 上运行。该项目具有依赖项,该依赖项使用了由于安全限制而无法在 App Engine 上调用的类(它不在 the whitelist 上)。我的(非常老套的)解决方案是将该类的修改版本复制到我的项目中(与原始类的名称和包匹配),不需要受限类。我认为这对开发和实时都有效,因为我的源代码出现在类路径中的外部依赖项之前。

为了使其更简洁,我决定将该类的修改版本放入它自己的项目中,该项目可以打包在 jar 中并发布供其他人在遇到此问题时使用。

这是我的 build.gradle:

// my jar that has 'fixed' version of Class.
compile files('path/to/my-hack-0.0.1.jar')

// dependency that includes class that won't run on appengine
compile 'org.elasticsearch:elasticsearch:1.4.4'

在我的本地开发服务器上,这工作正常,代码在运行时首先找到我的类的黑客版本。在现场,由于某种未知的原因,首先加载elasticsearch依赖项中的版本。

我知道在类路径中拥有同一类的两个版本并不理想,但我希望我能够可靠地强制我的版本位于类路径的开头。有任何想法吗?或者,有更好的方法来解决这个问题吗?

最佳答案

不太确定这是否是访问此问题的人正在寻找的内容,但这就是我的问题和我达到的解决方案。Jar A:包含 XYZ 类Jar B:还包含 XYZ 类我的项目需要 Jar B 位于类路径中,然后才能编译 Jar A。

问题是 Gradle 在解析依赖项后根据字母顺序对依赖项进行排序,这意味着 Jar B 将出现在生成的类路径中的 Jar A 之后,从而导致编译时出错。

解决方案:声明自定义配置并修补compileClasspath。这就是 build.gradle 的相关部分的样子。

configurations {
priority
sourceSets.main.compileClasspath = configurations.priority + sourceSets.main.compileClasspath
}

dependencies {
priority 'org.blah:JarB:2.3'
compile 'org.blah:JarA:2.4'
...
}

关于java - 我可以使用 Gradle 强制确定类路径中依赖项的顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31698510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com