【问题标题】:Gradle and API DependencyGradle 和 API 依赖
【发布时间】:2021-02-28 16:38:14
【问题描述】:

我有两个独立的项目,我真的不知道 NoClassDefFoundError 是否可以通过使用 build.gradle 中的 API 依赖来修复

在我的第一个项目中,我使用了这个库:

// https://mvnrepository.com/artifact/org.apache.bcel/bcel
compile group: 'org.apache.bcel', name: 'bcel', version: '6.5.0'

在这个项目的一些方法中,我抛出了这个异常:

throw new AssertionViolatedException("Response validation for " + HeaderValue + "Actual as " + StrActual + " Expected " + StrExpected);

如果我生成工件并在我的第二个项目中使用它作为在 build.gradle 中的导入

implementation name: 'Project1'

这样做我得到了错误:

Step failed
java.lang.NoClassDefFoundError: org/apache/bcel/verifier/exc/AssertionViolatedException

可以通过在第一个项目中使用 API 依赖项而不是在我的第二个项目中添加 bcel 依赖项来解决此问题吗?

谢谢!

【问题讨论】:

    标签: java api gradle build dependencies


    【解决方案1】:

    如果您使用 IntelliJ,您可以将第一个项目配置为 composite build

    否则您可以将 project1 发布到 mavenLocal 并在第二个项目中使用 mavenLocal repository。这意味着您也要声明与组和版本的依赖关系。

    implementation group: 'org.group', name: 'Project1', version: '1.0'
    

    文档建议在这种情况下最好使用composite build

    另一种选择是创建一个multiproject build,其中包括project1 和project2。在此设置中,project2 将在 project1 上声明 subproject dependency

    implementation project(':project1')
    

    【讨论】:

    • 第一个项目就像一个基础项目,有些团队需要 Jar 文件作为输入。在这种情况下复合构建是否正确?第一个项目应该与其他项目无关,我不应该指定我想要链接第一个项目的项目
    • 这真的取决于基础项目是在某个地方发布(如nexus)还是总是在本地编译。例如,如果基础项目在同一个 git 存储库中并在本地编译,那么我将使用多项目构建并将其作为项目导入。
    • 是的,它已在本地编译,我将尝试使用多项目构建方法。谢谢!
    猜你喜欢
    • 2019-05-12
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2022-08-16
    • 2023-03-25
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多