我有两个Gradle项目,让他们称之为蓝色和绿色。绿色依赖于蓝色,正如其build.gradle
:
repositories {
mavenLocal()
}
dependencies {
compile 'org.example:blue:1.0'
}
Blue使用Maven插件构建适当的工件:
apply plugin: 'maven'
group = 'org.example'
version = '1.0'
如果我在Blue上运行install
任务,它会创建一个JAR和一个POM并将它们放在我的~/.m2/repository
中,没问题。
我将Blue build.gradle
导入到我的IDEA项目中,它为Blue创建了一个模块,同样没问题。
如果我现在将Green build.gradle
导入到我的IDEA项目中,它会为Green创建一个模块,从存储库中获取Mavenized版本的Blue,创建一个相应的库,并添加Blue库以绿色模块作为依赖。
但是,如果我现在使用蓝色进行代码更改,则代码更改不会以绿色方式获取。 Green将继续使用Maven存储库中现在陈旧的副本。获得蓝色更改的唯一方法是重新安装Blue,至于重构Blue中的某些内容并将重构覆盖为Green中的用法,请忘掉它。问题
如何让IDEA识别我的Gradle项目与其相应的IDEA模块之间的相互依赖性?
编辑添加:多模块实际上不是一个选项,因为所涉及的依赖项在多个应用程序项目之间共享(更不用说其他共享库项目)并且不需要&#39 ; t整齐地适合单个分层目录结构。
编辑添加:有关我最终想出的内容的指针,请参阅this answer。当您想要同时处理项目及其依赖项时,仍然需要手动创建多模块项目,但它允许您或多或少地自由地交换源和二进制依赖项。
答案 0 :(得分:6)
发现了以下解决方法:
导入Green build.gradle
后,打开绿色模块的模块设置(或在项目结构下选择它)。然后,在Dependencies选项卡上,手动添加'live'依赖项并将它们移到列表中的Gradle版本之上:
即使通过Green build.gradle
上的“刷新外部项目”,这仍然存在,这在您编辑它以添加第三方库等时很有用。
请注意,您可以删除Gradle版本(Gradle: blue-2.0-snapshot
等),但在刷新项目时会重新添加它们。
另外值得注意的是:这将允许您一起编辑和重构蓝色,黄色和绿色,但是如果您因任何原因需要进行Gradle构建(例如,如果您正在使用Gradle的jettyRun
任务要启动一个webapp),你需要确保Gradle - install
蓝色和黄色,因为(只要我们不是在谈论一个多模块项目)Gradle只会使用来自回购的罐装版本。
答案 1 :(得分:2)
也许最好用两个子项目创建Gradle构建,然后Gradle和IDEA都会立即获取更改。
另一种可能性是将.m2/repository
中的JAR的依赖项替换为Blue项目的build
中的JAR文件,或者更好地使用模块依赖项。然后,您可以跳过发布步骤。您可以手动执行此操作或将其放入build.gradle
作为IDEA模块自定义 - http://www.gradle.org/docs/current/userguide/idea_plugin.html