Java IntelliJ gradle添加模块依赖项

Java IntelliJ gradle添加模块依赖项,java,intellij-idea,gradle,Java,Intellij Idea,Gradle,使用IntelliJ 2016.2. 使用Gradle 2.14.1 我有两个项目,每个项目都有自己的build.gradle文件和单独的目录结构: myLib (meant to be jarred and used by others) - build.gradle - settings.gradle - src/main/java/... sandbox (spring boot web app) - build.gradle - settings.gradle

使用IntelliJ 2016.2.
使用Gradle 2.14.1

我有两个项目,每个项目都有自己的build.gradle文件和单独的目录结构:

myLib (meant to be jarred and used by others)
  - build.gradle
  - settings.gradle
  - src/main/java/...

sandbox (spring boot web app)
  - build.gradle
  - settings.gradle
  - src/main/java/...
  - src/main/resources/...
希望你能了解情况。在IntelliJ中,我在同一级别(无子项目)具有以下模块结构:

简单的请求。。。我想在
sandbox
应用程序中使用
myLib
。我想在同一个项目中的两个模块,以发展两者

我已经尝试为IntelliJ中的
myLib
sandbox
添加模块依赖项。没有骰子。我试过添加一个jar引用,没有骰子

我认为我需要在build.gradle文件中添加一个依赖项,但无法确定如何添加。我尝试了编译文件“”,等等。没有骰子。

本地模块 这是大多数Gradle项目遵循的模式,其中有一个库,然后是使用该库的示例应用程序-

在顶级的
settings.gradle

include ':library', ':app'
app/build.gradle
中,编译包含的项目

dependencies {
    compile project(':library')
}
基本上,顶级的
build.gradle
,是子项目和变量的所有常见配置的包装器。例如,它最常用于Maven URL的
repositories{}
部分。有关详情,请参阅

远程模块 上面的内容对于在本地工作来说很好,但是假设您希望与其他许多开发人员共享您的repo,而不需要让他们下载额外的源代码。然后将其他库发布到远程服务器

这是您在将这些行添加到项目中时已经在做的事情

implementation("org:artifact:version")
如果您的项目在GitHub上公开,请使用类似的服务。您还可以在Bintray OSS或Maven Central上设置一个帐户,使您的库与大多数其他库一样可用

如果您的项目是公司内部的私有项目,您将需要一些Maven类型的服务器,无论是通用web服务器,还是Nexus或Artifactory,您都可以


然后添加
编译
实现
源代码,正常情况下

最终Gradle 3.1解决了这个问题。现在本机支持复合构建。更多 简而言之,将此行添加到sandbox settings.gradle文件中-

includeBuild '<PATH>/myLib'
includebild'/myLib'

如果您无法升级Gradle,那么您唯一的希望就是将mylib工件发布到本地maven repo,并将mavenLocal()添加到sandbox/build.Gradle。

这个答案在现代Gradle和intellij中已经过时,请参阅

原始答案

文章对其进行了讨论

基本上,您需要使用复合构建。因此,查看>工具窗口>渐变>右键单击使用库的项目>复合构建配置>勾选要使用本地版本的库项目


执行重建,然后应使用本地依赖关系最简单的方法就是将lib文件夹保留在项目的父目录中,并在module build.gradle文件中包含以下行

implementation fileTree(dir: '../libs', include: ['*.jar'])
implementation fileTree(dir: '../libs', include: ['*.aar'])

在这两个模块之外,您有顶级的
bulid.gradle
settings.gradle
吗?没有。我意识到我可以在“沙盒”中创建“lib”目录,并在每次重建和jared“myLib”时复制“myLib”jar文件,但我正在寻找更好的解决方案。我以为IntelliJ和/或Gradle会帮我把这些放在一起。这很奇怪,我注意到当我告诉idea在给定模块上添加依赖项时,它只在.idea文件中这样做,而不是在其他地方。类似地,如果我在IntelliJ IDE项目设置中添加依赖项,那么它会在IDE编辑器中解决错误;但是,我无法生成,因为IntelliJ没有对build.gradle和settings.gradle文件进行任何更改。因此,我按照下面的解决方案手动添加了依赖项。在外部设置文件中,我添加了“include”:myLib',在构建文件中,我添加了“compileproject(':myLib')”。显然,冒号是gradle用来表示子项目层次结构的分隔符。这听起来很合理,也正是我想要做的,但是,我在用IntelliJ解决问题时遇到了一些困难。谢谢,我会将此标记为解决方案。只是好奇,你通常使用什么IDE?我使用Intellij IDEA。我只创建过一个Gradle Java项目,尽管
在org.Gradle.api.project类型的根项目“我的项目名称”上找不到参数[../My Library Name]的方法include()。
@Ben确保它是设置文件,而不是构建文件,然后它采用模块名称,不是一个文件位置,答案完全没有帮助,除了链接到。这个链接有帮助。谢谢。您的链接似乎缺少
includebild
说明。非常感谢!唯一快速且非常简单的解决方案,不会破坏更改。从Idea 2019.1社区版开始,没有
复合构建配置
there@EugeneGr.Philippov是的,在更新的版本中,达尔文白沙的答案是正确的
repositories {
    maven { url "http://some.maven.site/" }
}
includeBuild '<PATH>/myLib'
implementation fileTree(dir: '../libs', include: ['*.jar'])
implementation fileTree(dir: '../libs', include: ['*.aar'])