2017-02-21 172 views
0

我建立一个jar文件,在编译时,取决于3件的logback文物(的logback码,的logback经典,的logback的扩展)摇篮依赖管理

这些都与compile声明范围。

我的jar生成了,但是当我尝试在不同的项目中使用它时,我发现我需要再次指定3个logback依赖项,否则就找不到这些类。我期待这些依赖已经通过声明对我的jar的依赖来实现。

我是新来的gradle和使用现有的脚本,我只有最懂的理解。

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依赖项来自nex我们回购。

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的确有窍门
+0

请说明如何声明依赖关系。我觉得他们是本地基于文件的依赖项而不是maven/ivy依赖项 –

+0

@LanceJava:我已经添加了一些我希望看到的更多细节 – DaveH

+0

问题似乎是,gradle无法将logback识别为您的项目的传递依赖项。我现在不知道用gradle来做这件事。也许在项目中添加一个pom文件,将logback标识为运行时依赖性。我相信gradle认可maven pom文件。 – DwB

回答

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

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") 
}