【问题标题】:Using Gradle with custom Ivy repository将 Gradle 与自定义 Ivy 存储库一起使用
【发布时间】: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 版

标签: gradle ivy


【解决方案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 中,这将是错误而不是警告。
猜你喜欢
  • 2013-04-08
  • 1970-01-01
  • 2011-06-17
  • 2014-11-12
  • 2014-04-14
  • 1970-01-01
  • 2015-10-02
  • 2018-04-13
  • 2014-03-07
相关资源
最近更新 更多