等级子项目和依赖项

问题描述 投票:1回答:1

这绝对是一个初学者的问题,但我无法使其正常工作。

我有一个库和一个依赖该库的应用程序。

.
/ library
/ application

我可以通过gradle install中的./library安装该库,然后使应用程序通过组/名称/版本依赖于该库,并通过应用程序mavenLocal()中的build.gradle信息库获取该库,然后在application文件夹中构建应用。那行得通。

但是我想有一个项目,并且我可以有一个命令来构建应用程序,如果需要,也可以创建库(类似于maven -am标志)。

这是我现在在父文件夹build.gradle中的内容:

subprojects {
  apply plugin: "java"
  repositories {
      mavenCentral()
  }
}

project(':application') {
  dependencies {
    compile project(':library')
  }
}

并且在同一文件夹中,我有settings.gradle

include ':library', ':application'

同样,如果我进入库文件夹并运行gradle install,它将起作用。我在~/.m2中得到了工件。

但是现在使用我描述的配置,如果我进入根文件夹并运行gradle shadowJar ..并且shadowJar任务仅出现在application中,则gradle尝试编译该库但失败,显然是因为它没有不会选择库依赖项。

* What went wrong:
Execution failed for task ':library:compileJava'.
> Compilation failed; see the compiler error output for details.

例如,错误类似:

任务:库:compileJava失败... / DateTimeAdapter.java:5:错误:包javax.xml.bind.annotation.adapters不存在导入javax.xml.bind.annotation.adapters.XmlAdapter;

并且肯定这些是library / build.gradle =>中的依赖项>

    implementation 'com.fasterxml.jackson.core:jackson-core:2.8.8'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.8'

所以,我的问题是如何指定应用程序对库的依赖关系,以便我可以运行单个命令,并在需要时让maven构建该库,然后由该应用程序来构建。我认为我所做的第一部分,但是失败,显然是由于库的传递依赖关系。我实际上希望在那之后需要处理第二部分,这就是如何在应用程序build.json中指定依赖项。我可能不得不从指定Maven组/名称/版本坐标切换到项目名称,但是我还没走那么远。

我绝对不想在根gradle文件中列出库依赖关系:我希望库处理其依赖关系,并应用其依赖关系,我想使根gradle文件保持较小。

这绝对是一个初学者的问题,但我无法使其正常工作。我有一个库和一个依赖该库的应用程序。 。 /库/应用程序我可以安装库...

gradle
1个回答
0
投票

application无法看到library的依赖项,因为您已将Jackson依赖项声明为libraryimplementation

© www.soinside.com 2019 - 2024. All rights reserved.