为什么Gradle在更新库版本时没有正确更新IDEA项目?

时间:2015-11-04 06:06:44

标签: gradle dependencies

更多的Gradle构建地狱,我无法弄清楚。在我们的顶级依赖项中,我们有:

  joda_time: [
    'joda-time:joda-time:2.3'
  ],

在项目库中有:

$ find .idea/libraries/*joda_time*
.idea/libraries/Gradle__joda_time_joda_time_2_3.xml

所以今天我尝试更新它:

  joda_time: [
    'joda-time:joda-time:2.9'
  ],

然后我运行gradle idea,这似乎成功了,但是如果我查看这些库,它仍然具有以前的版本:

$ find .idea/libraries/*joda_time*
.idea/libraries/Gradle__joda_time_joda_time_2_3.xml

它到底在做什么?我甚至可以看到它已经下载并缓存了jar文件,但该项目仍然指的是旧版本。

更新

我看到的是它为后来的版本添加了 new 依赖项。因此,在每个模块的相同.iml文件中,我都有对项目库的引用:

<orderEntry type="library" name="Gradle: joda-time:joda-time:2.3" level="project" />

但是我直接分别引用了jar文件:

<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.3/56498efd17752898cfcc3868c1b6211a07b12b8f/joda-time-2.3.jar!/" />
    </CLASSES>
    <JAVADOC>
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.3/5290263bb45387985d253240686ca6fb2bb85b14/joda-time-2.3-javadoc.jar!/" />
    </JAVADOC>
    <SOURCES>
      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/joda-time/joda-time/2.3/ecd8588d8ce0963eb443de31d5fea29e3205f160/joda-time-2.3-sources.jar!/" />
    </SOURCES>
  </library>
</orderEntry>

当我将gradle文件更改为2.9时,Gradle只更新其中一个而不删除另一个。

我觉得这很令人惊讶,因为Gradle应该是“拥有”依赖关系的那个。然后,应该从文件中删除依赖项,并在每次重新生成文件时将其替换为自己的依赖项。否则,每当有人更新任何东西时,都会出现这样的问题。

所以我想我现在可以看到两个解决方法:

  1. 尝试使用module.iml.beforeMerged清除XML的内容,然后再合并到新的依赖项中。

  2. 放弃干净利落,让ideaModule任务依赖于cleanIdeaModule。

  3. 当然,我仍然想知道为什么会这样做,所以我会留下这个问题。

0 个答案:

没有答案