我有一个具有以下基本结构的多模块 gradle 项目:
root
core
c-interface
m-interface
c-interface 和 m-interface 都依赖于核心项目:
compile project(':root:core')
c-interface 和 m-interface 使用 WAR 插件,但 core 没有,只是一个 jar。
在核心项目中,我使用以下内容引入了一些文件系统依赖项。我无法将这些依赖项之一打包在 c-interface 和 m-interface 生成的 WAR 中。以前我在一个nexus maven存储库中有这个依赖关系,所以我可以在c-interface和m-interface的providedRuntime配置中按组、名称、版本排除它。
我无法弄清楚如何对文件依赖项做同样的事情。gradle 依赖项任务没有列出文件依赖项,所以我不知道我会在提供的运行时中放入什么。
我阅读了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
更新
没有war插件的providedCompile看起来是一种可能性。我在核心 build.gradle 中进行了设置,它编译得很好,但是 c-interface 和 m-interface 在编译时也需要依赖。在 c-interface 和 m-interface 中将文件作为providedCompile(甚至使用compile 进行完整性检查)包含在内,并不能修复与缺少 management.jar 依赖项相关的编译时错误。我的猜测是因为它已经在 core 中定义为 providedCompile ,所以新声明在 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
c接口/build.gradle:
providedCompile files('dependencies/compile/archive/management.jar')