将 Gradle 与自定义 Ivy 存储库一起使用
Posted
技术标签:
【中文标题】将 Gradle 与自定义 Ivy 存储库一起使用【英文标题】:Using Gradle with custom Ivy repository 【发布时间】:2014-05-14 06:07:58 【问题描述】:我是 Gradle/Groovy 的新手,所以我可能遗漏了一些明显的东西。你能帮忙吗?
我们使用 Ivy 进行依赖管理。我正在试用 Gradle,并希望与我们现有的 Ivy 基础设施集成。通常这应该是可能的,但是我们常春藤的布局有点特殊,而且……我无法让它工作。
以 commons-lang-2.4.jar 为例。
通常,您会像这样通过 ivy 获取此文件(参见http://mvnrepository.com/artifact/commons-lang/commons-lang/2.4):
<dependency org="commons-lang" name="commons-lang" rev="2.4"/>
但我们必须这样做:
<dependency org="org.apache" name="commons-lang" rev="2.4" conf="compile"/>
这是因为我们的 Ivy 布局考虑了组织的 url,例如像这样:
<ivyrepository>/org/apache/commons-lang/2.4/commons-lang-2.4.jar
我现在尝试将其翻译为 Gradle:
repositories
ivy
url 'http://svnserver/svn_public/trunk/ivyrepository'
layout 'pattern',
artifact '[organisation]/[module]/[revision]/[artifact]-[revision].[ext]'
ivy '[organisation]/[module]/[revision]/[module]-[revision].ivy'
dependencies
compile 'org.apache:commons-lang:2.4'
这当然是失败的,因为 '[organisation]/[module]' 转换为 'org.apache/commons-lang',它应该转换为 org/apache/commons-lang!
所以我尝试了这个,天真地认为 replaceAll() 会用斜杠替换那些点:
repositories
ivy
url 'http://svnserver/svn_public/trunk/ivyrepository'
layout 'pattern',
artifact '[organisation].replaceAll(\'.\',\'/\')/[module]/[revision]/[module]-[revision].jar'
ivy '[organisation].replaceAll(\'.\',\'/\')/[module]/[revision]/[module]-[revision].ivy'
唉,函数没有被评估!救命!
【问题讨论】:
我认为你需要使用maven
模式,然后像上面一样重新配置它。
不确定您的意思?我将在哪里使用 Maven 模式?我无法更改现有的 ivy 布局...
对不起,我的意思是 maven
布局。
换句话说,你会使用layout 'maven', ...
。这应该提供 Maven 样式的组分隔符。
谢谢。但这给了我以下例外:“找不到参数 [[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]] 的方法 artifact() ...MavenRepositoryLayout_Decorated@5c2445"。我使用的是 1.11 版
【参考方案1】:
要获得组织部分的 Maven 样式布局,请使用:
repositories
ivy
url ...
layout 'pattern',
m2compatible = true
...
【讨论】:
我还应该包括人工制品和常春藤图案吗?如果我这样做了,我会在日志中看到以下内容:[HTTP HEAD:svnserver/svn_public/trunk/ivyrepository/org.apache/…。所以 Gradle 仍在目录 'org.apache' 中搜索。如果我不添加这些模式,我看不到任何下载尝试;我刚刚得到:“找不到 org.apache:commons-lang:2.4”。不知道它是否相关,但 m2Compatible 属性似乎已被弃用(“Deprecated dynamic property: "m2Compatible")? 对不起,它是m2compatible
(带有小写的c
)。是的,您应该包括模式。 “不推荐使用的 dynamic 属性”通常是拼写错误的结果。在 Gradle 2.x 中,这将是错误而不是警告。以上是关于将 Gradle 与自定义 Ivy 存储库一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 搜索 Ivy 服务但未定义 Ivy 配置/存储库
如何使用自定义 gradle 插件而不将其发布到 maven/ivy 存储库?
使用 gradle 解决代理存储库上的 ivy 依赖关系会导致资源丢失