使用Gradle与自定义常春藤存储库

Dav*_*lté 7 ivy gradle

我是Gradle/Groovy的新手,所以我可能会遗漏一些明显的东西.你能帮我吗?

我们使用Ivy进行依赖管理.我正在尝试Gradle并希望与我们现有的Ivy基础设施集成.通常这应该是可能的,但我们的常春藤的布局有点特殊,而且......我无法让它工作.

以commons-lang-2.4.jar为例.

通常情况下,您可以通过常春藤获取此文件(参见http://mvnrepository.com/artifact/commons-lang/commons-lang/2.4):

<dependency org="commons-lang" name="commons-lang" rev="2.4"/>
Run Code Online (Sandbox Code Playgroud)

但是我们必须这样做:

<dependency org="org.apache" name="commons-lang" rev="2.4" conf="compile"/>
Run Code Online (Sandbox Code Playgroud)

那是因为我们的常春藤是在考虑到组织的网址的情况下制定的,例如:

<ivyrepository>/org/apache/commons-lang/2.4/commons-lang-2.4.jar
Run Code Online (Sandbox Code Playgroud)

我现在尝试将其翻译为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'
}
Run Code Online (Sandbox Code Playgroud)

这当然是失败的,因为'[organization]/[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'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

唉,这个功能没有评估!救命!

Pet*_*ser 6

要获得组织部分的Maven样式布局,请使用:

repositories {
    ivy {
        url ...
        layout 'pattern', {
            m2compatible = true
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)