这绝对是一个初学者的问题,但我无法使其正常工作。
我有一个库和一个依赖该库的应用程序。
.
/ 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文件保持较小。
这绝对是一个初学者的问题,但我无法使其正常工作。我有一个库和一个依赖该库的应用程序。 。 /库/应用程序我可以安装库...
application
无法看到library
的依赖项,因为您已将Jackson依赖项声明为library
的implementation