2016-09-27 38 views
1

我的工作区中有三个eclipse项目(项目A,项目B和项目C)。项目B和C依赖于项目A.Buildship - 将其他Eclipse项目作为依赖关系

在我的build.gradle文件,我已经设置了在B和C的依赖关系指:

repositories { 
    mavenCentral() 
    mavenLocal() 
} 

dependencies { 
    compile('com.example:projectA:1.0') 
} 

然而,当我点击鼠标右键,在项目B或C上选择Gradle-> Refresh Gradle Project,它表示无法解决projectA依赖项。

我使用Mars 4.5.2和Buildship版本1.0.20。我知道Buildship 2.0一旦发布就会提供支持,以便它可以将其他eclipse项目称为依赖关系。在过渡期间,如何将项目A安装到回购库中并在项目B和C中引用?我没有在Buildship Gradle Tasks中看到项目A的安装选项。

+0

如果您使用gradle命令行,上述配置是否成功构建? './gradlew projectB:build' – Jolta

+0

不,它声明'找不到com.example:projectA:1.0。在以下位置搜索:“地点包括本地回购。当我浏览本地回购文件系统时,我也找不到projectA的路径,所以我的问题似乎是无法在本地回购站中安装项目A.但我不确定如何使用Buildship安装项目A. – James

+0

我认为你的问题与Buildship无关......我会发布一个答案。 – Jolta

回答

1

您已经使用GAV(群件神器版)添加了相关性:com.example:projectA:1.0

当您使用GAV在gradle中声明依赖项时,gradle会假定它应该在它所知的所有可用Maven或Ivy存储库中查找该依赖项。我认为它无法解决GAV的原因是您从未将项目A发布到构建搜索的任何存储库。

你有两条出路:

  1. 发布项目A的输出(JAR文件)到一个Maven回购。您需要申请Maven publishing plugin。例如,您可以使用“gradle publishToMavenLocal”发布到您的本地回购站。

  2. 声明依赖项为项目依赖项,并保留项目as sub-project of the same parent project。 你会声明依赖作为compile project(':projectA')

后者可能是一个更容易的工作。

顺便说一句,建设本身可能与这个问题很少有关系,而是使用像Gradle或Maven这样的依赖跟踪构建系统的一个普遍问题。我记得在3.0和更高版本中看到了Gradle如何更好地解决这个问题的一些参考,但我目前似乎无法找到链接。

+1

在Gradle 3.1中,[composite builds](https://docs.gradle.org/current/userguide/composite_builds.html)是一个选项。它在Buildship 1.0.20中不受支持,但将在2.0中。在此期间,我选择使用Maven发布插件。一旦支持,转换为使用复合材料应该很容易。我现有的回购(SVN)目录结构与Gradle标准多项目结构一起工作。 – James

+0

感谢您的指针!我会考虑使用这个,因为项目之间的依赖关系一直是我迄今为止对Gradle的主要抱怨。 – Jolta

相关问题