目前在v2中,如果CorDapp引用模块X,模块X具有对模块Y的传递依赖性,使得Corda使用Y,则如果Corda和X的相应Y版本不同,则可能发生潜在的版本冲突 . 一个例子是重用现有的内部库,包含业务和序列化逻辑,这取决于 Jackson
.
在这种情况下,生成的CorDapp打包和Corda运行时似乎强制执行与Corda相关的Y版本 .
如果Y的版本充分不同,我们可以得到X破坏的场景,因为Y不支持某些类型和方法 .
是否有一般方法可以使用gradle配置(或其他一些机制)来限制Y的正确版本以供X使用,而不会影响Corda运行时?
1 回答
所以我解决了这个问题,并在此过程中,终于学到了一些基础知识(来自maven背景) . 毫无疑问,以下内容不够优雅,可以更好地推广 - 但它确实有效!
假设
你正在使用当前的v2 kotlin cordapp template
cordapp
子模块使用它们或它们的依赖项与Corda
运行时冲突的依赖项 .解决方案
1.添加shadowJar引用
在根
build.gradle
文件中添加以下内容classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
到
buildscript
dependencies
:2.将shadowJar任务添加到cordapp
在
cordapp
项目中,应用shadowJar
插件 .然后添加调用参数化:
3.更改构建依赖项
现在将
deployNodes
的定义更改为不依赖于jar
任务,而是依赖于每个模块的构建: