Ric*_*ich 4 dependencies build gradle
我有一个多模块gradle项目,具有以下基本结构:
root
core
c-interface
m-interface
Run Code Online (Sandbox Code Playgroud)
c接口和m接口都依赖于核心项目:
compile project(':root:core')
Run Code Online (Sandbox Code Playgroud)
c-interface和m-interface使用WAR插件,但核心没有,只是一个jar.
在核心项目中,我将通过以下方式提取一些文件系统依赖项.其中一个依赖项我不能打包在由c-interface和m-interface生成的WAR中.以前我在nexus maven存储库中有这种依赖关系,所以我可以在c-interface和m-interface中的providedRuntime配置中按组,名称,版本排除它.
我无法弄清楚如何对文件依赖性做同样的事情.gradle依赖项任务不列出文件依赖项,因此我不知道我将在provideRuntime中放入什么.
我阅读了http://issues.gradle.org/browse/GRADLE-471但是尝试使用这个想法似乎没有从我的包中删除存档.这是我目前正在定义的内容(在核心的build.gradle中):
compile fileTree(dir: 'dependencies/compile/archive', include: '*.jar', exclude: 'management.jar')
compile(files('dependencies/compile/archive/management.jar')){ notPackaged = true } // Excludes it from all publications
Run Code Online (Sandbox Code Playgroud)
更新
提供没有war插件的编译看起来像是一种可能性.我在核心build.gradle中设置它并且编译得很好,但是c-interface和m-interface在编译时也需要依赖.在c-interface和m-interface中包含作为providedCompile(甚至是带有compile的健全性检查)的文件并没有修复与缺少management.jar依赖关系相关的编译时错误.我的推测是因为它已经作为核心中的compile作用,以便在c-interface和m-interface中忽略新的声明.
核心/的build.gradle:
configurations { providedCompile }
dependencies {
providedCompile files('dependencies/compile/archive/management.jar')
}
sourceSets.main.compileClasspath += configurations.providedCompile
sourceSets.test.compileClasspath += configurations.providedCompile
sourceSets.test.runtimeClasspath += configurations.providedCompile
Run Code Online (Sandbox Code Playgroud)
C-接口/的build.gradle:
providedCompile files('dependencies/compile/archive/management.jar')
Run Code Online (Sandbox Code Playgroud)
erd*_*rdi 13
可能有一个更简洁的解决方案,但您可以指定自定义配置:
configurations {
compileOnly
}
Run Code Online (Sandbox Code Playgroud)
然后指定所有依赖项:
dependencies {
compile fileTree(dir: 'dependencies/compile/archive', include: '*.jar', exclude: 'management.jar')
compileOnly files('dependencies/compile/archive/management.jar')
}
Run Code Online (Sandbox Code Playgroud)
最后将compileOnly配置添加到所有源集的类路径中
sourceSets.all {
compileClasspath += configurations.compileOnly
}
Run Code Online (Sandbox Code Playgroud)
这种方式management.jar应该在类路径上进行编译,但不会打包.
编辑现在我完全理解你的问题.以下对我来说是一个测试项目.
在核心项目gradle文件中:
repositories {
flatDir {
dirs 'dependencies/compile/archive'
}
}
dependencies {
compile fileTree(dir: 'dependencies/compile/archive', include: '*.jar', exclude: 'management.jar')
compile ':management:'
}
Run Code Online (Sandbox Code Playgroud)
在依赖核心的项目中:
repositories {
flatDir {
dirs new File(project(':core').projectDir, 'dependencies/compile/archive')
}
}
dependencies {
compile(project(':core')) {
exclude module: 'management'
}
compileOnly ':management':
}
sourceSets.all {
compileClasspath += configurations.compileOnly
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15123 次 |
| 最近记录: |