Gradle Dependency Management

时间:2017-02-21 15:23:25

标签: java gradle dependency-management

我正在构建一个jar文件,在编译时,它依赖于3个logback伪影(log-back-code,log-back-classic,logback-extensions)

这些都是compile范围声明的。

我的jar构建,但是当我尝试在不同的项目中使用它时,我发现我需要再次指定3个logback依赖项,否则找不到类。我希望通过声明对jar的依赖来实现这些依赖性。

我刚接触并使用现有的脚本,我只有最清楚的理解。

EDIT - Added some details of the dependency config

在构建jar文件的项目中,依赖关系声明如下

compile group: 'ch.qos.logback',name: 'logback-classic', version: '1.2.1' compile group: 'ch.qos.logback',name: 'logback-core', version: '1.2.1' compile group: 'org.logback-extensions',name: 'logback-ext-spring', version: '0.1.4'

我生产的jar文件在"其他"项目依赖项 compile group: 'mygroup',name: 'mylogback', version: '1.0.0-SNAPSHOT'

此依赖关系从我的本地maven存储库中提取,而logback依赖关系来自nexus存储库。

Further Edit 另一个项目的依赖树有这个,这似乎支持我的观点,即项目没有带来它的依赖....

> |    +--- commons-io:commons-io:2.5 |    \---
> commons-collections:commons-collections:3.2.2
> +--- mygroup:mylogback:1.0.0-SNAPSHOT
> +--- ch.qos.logback:logback-classic:1.2.1 |    +--- ch.qos.logback:logback-core:1.2.1 |    \--- org.slf4j:slf4j-api:1.7.22
> +--- ch.qos.logback:logback-core:1.2.1
> +--- org.logback-extensions:logback-ext-spring:0.1.4 |    \--- ch.qos.logback:logback-classic:1.1.1 -> 1.2.1 (*)

Resolution

要回答我自己的问题,问题是由于

  • 我的构建脚本中没有maven-publish插件
  • 发布publishing一个格式错误的artefact:jar任务。将此更改为from components.java可以解决问题

2 个答案:

答案 0 :(得分:1)

我觉得你的问题在于你的人工制品的部署,因为它编译好了。

确保您的部署/上传定义与目标artefact存储库的格式相同(在您的情况下为本地maven,对吗?)。您可以通过在目标文件夹中查找pom文件(或常春藤文件,具体取决于您的定义)来检查这一点,并检查它是否包含正确格式的详细信息。

你的定义是这样的吗? :

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
        }
    }
}

The Gradle documentation on maven plugin

中查看更多详情

有关发布的更多信息,请参阅Gradle documentation on publishing,有关依赖性解析和模式的更多信息,请参阅Gradle documentation on dependency management

答案 1 :(得分:0)

将依赖项应用于所有子项目。

subprojects {
    dependencies {
        // ...
    }
}

还有一个完整的api能够选择特定项目并对其应用配置。

configure([project(":a"), project(":b"), project(":c")]) {
    dependencies {
        // ...
    }
}

configure(subprojects.findAll { it.name.startsWith("prefix") }) {
    dependencies {
        // ...
    }
}

此外,如果您希望传递依赖项工作,则需要通过gradle添加项目间依赖项。

dependencies {
    compile project(":toolbox")
}