【问题标题】:How can I tell gradle to use the newest library, snapshot or no?我如何告诉 gradle 使用最新的库、快照或不使用?
【发布时间】:2015-02-17 21:19:19
【问题描述】:

我有一个具有以下结构的个人 maven repo 设置:

root (accessible via http)
 - maven/
   - com/
     - mycompany/
       - core/
         - core/
           - 1.1.0-SNAPSHOT/
           - 1.1.0/
           - maven-metadata.xml
           - maven-metadata.xml.md5
           - maven-metadata.xml.sha1

现在,1.1.01.1.0-SNAPSHOT 目录内是适当的库,采用 aar 形式(我在 android 上运行)。在我想利用这个库的 build.gradle 文件的项目中,我有以下内容:

repositories {                                                                  
    maven { url 'http://builds.myserver.net/maven' }

}
dependencies {
      compile 'com.mycompany.core:core:1.1.0@aar'                       
}

现在,当我执行./gradlew --refresh-dependencies 时,它当然会下载版本1.1.0(不是1.1.0-SNAPSHOT)。如果我将依赖项更改为 compile 'com.mycompany.core:core:1.1.0-SNAPSHOT@aar',那么它会找到适当的 SNAPSHOT。这一切都很好,但我真正想要的是能够指定最新的版本。因此,例如,如果我有一个库版本 1.2.0,它应该会找到它,或者 1.2.0-SNAPSHOT,它应该会找到它。我试过compile 'com.mycompany.core:core:1.1.0+@aar',但仍然只能找到版本1.1.0,而不是1.1.0-SNAPSHOT,如果我有1.2.01.2.0-SNAPSHOT,它也找不到。

我想知道+ 的目的是什么,如果它没有在 repo 中找到最新的库。它是否只跟踪第一个版本号?还是以某种方式过时?

编辑:

按照建议,我尝试将我的 build.gradle 引用 latest.integration,如:compile 'com.mycompany.core:core:latest.integration' (I also removed the@aar), but when I run./gradlew --refresh-dependencies`,我看到以下内容:

> Could not resolve all dependencies for configuration
> Could not resolve com.mycompany.core:core:latest.integration.
     Required by:
         my-project:MyApp:unspecified
      > java.lang.NullPointerException (no error message)

我想知道这是否是由于旧版本的 gradle 造成的。看起来我们正在使用:

mustafar scottjohnson$ ./gradlew --version

------------------------------------------------------------
Gradle 1.12
------------------------------------------------------------

Build time:   2014-04-29 09:24:31 UTC
Build number: none
Revision:     a831fa866d46cbee94e61a09af15f9dd95987421

Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
Ivy:          2.2.0
JVM:          1.6.0_65 (Apple Inc. 20.65-b04-466.1)
OS:           Mac OS X 10.10.1 x86_64

看来,当我用--info 运行它时,它仍在寻找1.2.0(而不是1.2.0-SNAPSHOT

Resource missing. [HTTP GET: http://builds.myserver.net/maven/com/mycompany/core/core/1.2.0/core-1.2.0.pom]
Resource missing. [HTTP HEAD: http://builds.myserver.net/maven/com/mycompany/core/core/1.2.0/core-1.2.0.aar]

【问题讨论】:

  • 当你使用1.1.+1.2.+时,你得到你想要的了吗?从this answer 看来,Gradle 可能会使用Ivy version matcher syntax,这可能会给您提供其他语法思路来尝试。
  • 让我试试,我会告诉你的。感谢您的建议。

标签: android maven gradle aar


【解决方案1】:

"com.mycompany.core:core:latest.integration" 应该可以解决问题。 ("com.mycompany.core:core:+" 在某些 Gradle 版本中具有相同的效果,但只会匹配其他 Gradle 版本中的发布(即非快照)。获取最新发布版本的安全方法是 latest.release。)@aar 应该t 是必要的(假设发布了具有正确打包类型的 POM)并且将禁用传递依赖解析,这通常不是您想要的。

【讨论】:

  • 抱歉回复晚了...假期和所有。 ;) 我在上面编辑了我的问题,但我在尝试使用 latest.integration 时看到了一个例外。
  • 我必须看到--stacktrace。尝试使用最新的 Gradle 版本。
猜你喜欢
  • 2012-10-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多