如何从gradle构建生成pom.xml时使用通配符解析依赖关系

时间:2014-08-05 22:35:32

标签: maven gradle

我在我的应用程序中使用Gradle(v2.0)。对于其中一个依赖项,我在版本中使用通配符(参见下面的代码)

的build.gradle

ext {
  my_utils_version = "1.0+"
}

dependencies {
  compile "com.demo.myapp:my-utils:${my_utils_version}"
}

我使用以下代码

从我的gradle构建生成POM
task writePom << {
  conf2ScopeMappings.mappings.remove(configurations.testCompile)
  conf2ScopeMappings.mappings.remove(configurations.testRuntime)
  pom {
  }.writeTo("$buildDir/libs/pom.xml")
}
assemble.dependsOn writePom

因此,只要Gradle生成POM,它就会使用1.0+作为依赖项compile "com.demo.myapp:my-utils:${my_utils_version}"的版本。在生成的POM.xml中,我看到

<dependency>
  <groupId>com.demo.myapp</groupId>
  <artifactId>my-utils</artifactId>
  <version>1.0+</version>
  <scope>compile</scope>
</dependency>

Maven无法解析版本1.0+。 Maven需要[1.0)作为自己的通配符版本。

有人可以帮我解决这个问题吗?如何告诉Gradle使用[1.0)代替1.0+

2 个答案:

答案 0 :(得分:1)

Gradle确实支持Maven的版本范围表示法,因此您可以在构建脚本中使用[1.0)(尽管我不太确定Maven / Gradle是否允许省略上限)。

答案 1 :(得分:0)

根据Peter Niederwieser的说法,我应该使用符号[1.0,)作为版本。 Maven和Gradle都理解这种表示法。

ext {
       my_utils_version = "[1.0,)"
    }

    dependencies {
      compile "com.demo.myapp:my-utils:${my_utils_version}"
    }

这解决了我的问题。由于彼得没有回答这个建议作为答案,我这样做。所以,彼得给出了实际答案;不是我:)。

谢谢Peter的帮助。它帮助我节省了大量时间,并在我的应用程序中摆脱了另一个优先级为1的问题。