【发布时间】: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 版