gpt4 book ai didi

corda - CorDapps 如何处理传递依赖

转载 作者:行者123 更新时间:2023-12-05 00:48:49 25 4
gpt4 key购买 nike

目前在 v2 中,如果 CorDapp 引用模块 X,该模块对模块 Y 具有传递依赖关系,因此 Corda 使用 Y,如果 Corda 和 X 各自的 Y 版本不同,则可能发生潜在的版本冲突。一个例子是重用现有的内部库,包含业务和序列化逻辑,它依赖于 Jackson .

在这种情况下,生成的 CorDapp 打包和 Corda 运行时似乎强制执行与 Corda 相关的 Y 版本。

如果 Y 的版本差异很大,我们可以得到诸如 X 中断这样的场景,因为 Y 不支持某些类型和方法。

是否有一种通用方法可以使用 gradle 配置(或其他一些机制)来限制 Y 的正确版本以供 X 使用,而不影响 Corda 运行时?

最佳答案

所以我解决了这个问题,在这个过程中,终于学到了一些 gradle 基础知识(来自 maven 背景)。毫无疑问,以下内容是不雅的,可以更好地概括 - 但它有效!

TLDR: shadowJar



假设
  • 您正在使用当前的 v2 kotlin cordapp template
  • cordapp子模块使用它们或其依赖项与 Corda 冲突的依赖项。运行。

  • 解决方案

    1.添加 shadowJar引用

    在根 build.gradle文件添加以下内容
    classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
    buildscript dependencies :
    buildscript {
    // ...
    dependencies {
    // ...
    classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
    }
    }

    2.添加 shadowJar任务到 cordapp
    cordapp项目,申请 shadowJar插入。

    Please Note: I needed to put this before all existing plugins for it to work.


    apply plugin: 'com.github.johnrengelman.shadow'
    apply plugin: 'kotlin'
    // ... etc

    然后添加调用参数化:
    tasks {
    shadowJar {
    mergeServiceFiles()

    // Place your shaded packages here!

    relocate 'io.netty', 'shadow.io.netty'
    relocate 'com.fasterxml', 'shadow.com.fasterxml'

    configurations = [project.configurations.compile]
    baseName = jar.baseName + "-" + jar.version
    classifier = null
    version = null
    dependencies {
    include(dependency(".*:.*:.*"))
    exclude(dependency('org.jetbrains.kotlin:.*:.*'))
    exclude(dependency('net.corda:.*:.*'))
    exclude(dependency('org.apache.logging.*:.*:.*'))
    exclude(dependency('org.apache.activemq:.*:.*'))
    exclude(dependency('com.google.*:.*:.*'))
    exclude(dependency('io.reactivex:.*:.*'))
    exclude(dependency('org.bouncycastle.*:.*:.*'))
    exclude(dependency('org.glassfish.*:.*:.*'))
    exclude(dependency('co.paralleluniverse.*:.*:.*'))
    exclude(dependency('co.paralleluniverse.*:.*:.*'))
    exclude(dependency('com.typesafe.*:.*:.*'))
    exclude(dependency('com.esotericsoftware.*:.*:.*'))
    exclude(dependency('org.qpid.*:.*:.*'))
    }
    }
    }

    3.更改构建依赖项

    现在更改 deployNodes 的定义不依赖 jar任务,而是取决于每个模块的构建:
    task deployNodes(type: net.corda.plugins.Cordform, dependsOn: [':cordapp-contracts-states:jar', ':cordapp:shadowJar']) {
    // ... etc
    }

    关于corda - CorDapps 如何处理传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48645361/

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