2015-06-20 67 views
4

背景故事:能够解决模块依赖动态基于版本

在Eclipse中,当你有POM文件(并因此版本)打开了多个项目,如果版本匹配的话,会自动使用本地引用您列出的依赖关系。如果它们不匹配,则它依赖于回购中的工件。 (这很方便,因为它允许您在活动版本上进行实时编辑/链接,同时对不稳定的项目/依赖项版本具有固定的依赖关系)。



问题

在gradle这个,似乎没有成为一个方式说

我靠这个子模块,X版本

相反,看来你ar Ë只能说

我靠这个子模块上,我不在乎哪一个版本,我会好好当前的/活动之一。


那么,有没有更好的语法常规:

compile project(':submodules:submodule1') 

也许类似?:

compile project(':submodules:submodule1:0.1-SNAPSHOT') 

compile project('com.mydomain:submodule1:0.1-SNAPSHOT') 
+0

你如何在模块中进行版本控制?一个模块本质上只是一个磁盘上的一个目录,其中包含一个构建文件。你将如何组织版本? –

+0

那么,当一个模块构建时,如果该模块启用了maven,那么构建服务器会将该构件推送到本地nexus存储库。那样,那个模块的版本就可以在那里使用。同样,使用给定模块在本地运行“安装”也会生成本地引用的工件。 – CasualT

+0

所以通常情况下,你会推动你的项目,并且它会碰到构建服务器,构建服务器会在项目中递归地构建和构建所有构件,并将相应的版本推送到存储库。 – CasualT

回答

2

也许你做如果您需要依赖特定版本,则不想使用项目引用。项目参考文件基本上说明了你在问题中提到的内容。更确切地说,它不是“我不在乎哪个版本”,而是像“我依赖于这个子项目 - 在版本/状态中它刚才”。这就是项目引用的内容 - 声明对另一个项目的依赖关系,而不是特定的JAR /版本。

如果您需要依赖于一个特定的版本,您应该声明它没有项目的依赖,比如:

compile('com.mygroupid:submodule1:0.1-SNAPSHOT') 

这是

compile(group:'com.mygroupid', name:'submodule1', version:'0.1-SNAPSHOT') 

缩短版在默认情况下,该将使用来自回购的神器。但是有一个解决方案可以让你更接近你想要的东西。 eclipse-integration-gradle插件可以检测到这种依赖关系,将它们替换为具有Eclipse项目依赖关系的。该选项被称为“重新映射罐到Gradle项目”。因此,如果Eclipse工作空间中有一个目标项目,其名称与目标模块相对应,则此类Eclipse项目将被用于,而不是的回购JAR。

我不确定在同一工作区中是否可以使用同一项目的多个版本(如果这是您需要的)。

+0

那么,在Android项目中使用gradle的全部观点正在偏离日食,所以第二部分很好理解,但最终没有用。就分离到完全不同的项目而言......我认为它,但很可能只是使用属性或风格来最终控制构建,以在从项目构建的现有构件或使用本地引用之间进行切换 – CasualT

+0

那么究竟需要什么设置?是否需要几个版本的您的项目在包含源的独立工作空间目录中?然后允许交叉链接,以便版本V2的子模块SMA(表示为gradle子项目“:prj:SMA”)依赖于另一个子模块SMB(“:prj:SMB”)那么a)如果存在声明版本为V1的项目“prj”的工作空间目录,则使用该源目录,b)如果没有这样的工作空间目录,则使用已经构建的JAR在某个远程存储库中。这是你想要的吗? – Marwin

+0

是的,大致。你之前使用过eclipse + maven集成吗?基本上是如何工作。它根据需要自动关联。 – CasualT