45

我需要在我的应用程序中使用 Amazon Maps 和 Amazon Messaging。

使用 gradle,我没有成功添加具有“提供”范围的 Amazon 依赖项,因为它们需要

JAR 文件包含 Amazon Maps API 的存根实现。它不包含 Maps API 类的实际实现,因此您不应将 JAR 编译到您的应用程序中。

亚马逊支持提供的解决方案都不适合我。

如果有人成功通过 Gradle 使用亚马逊地图或亚马逊消息传递,请在此处分享您的 build.gradle 文件。

4

5 回答 5

62

Gradle 的 2.12 版本中compileOnly添加了类似的功能给provided范围。测试类路径中发生的情况有所不同。以下是发行说明中的​​相关引用和片段:

您现在可以声明仅在编译时与Java 插件一起使用的依赖项。仅编译依赖项仅在源代码编译期间使用,并且不包含在运行时类路径中或暴露给依赖项目。此行为类似于基于 Maven 的构建中可用的“提供”范围。但是,与 Maven 提供的依赖项不同,Gradle 中的仅编译依赖项不包含在测试类路径中。

仅编译依赖项应分配给相关源集的“compileOnly”配置。

dependencies {
    compileOnly 'javax.servlet:servlet-api:2.5'
}
于 2016-03-14T13:38:13.170 回答
41

我一直在使用的解决方案非常简单。您必须将以下代码添加到您的 build.gradle 文件中:

apply plugin: 'eclipse'  // Eclipse users only

configurations {
    provided
}

sourceSets {
    main.compileClasspath += configurations.provided
    test.compileClasspath += configurations.provided
    test.runtimeClasspath += configurations.provided
}

eclipse.classpath.plusConfigurations += configurations.provided  // Eclipse users only

如果您不是 Eclipse 用户(我不是),您实际上并不需要第一行和最后一行,正如您可能已经猜到的那样。

完成上述配置添加后,您可以简单地在您的依赖项部分中添加提供的依赖项以及任何常规编译依赖项:

dependencies {
    compile group: 'org.springframework', name: 'spring-core', version: '3.2.6.RELEASE'

    provided group: 'javax.servlet', name: 'servlet-api', version:'2.5'
    provided group: 'javax.servlet.jsp', name: 'jsp-api', version:'2.1'
}

希望有帮助。一段时间以来,它对我来说一直很好。

于 2013-12-30T14:13:44.757 回答
8

Netflix 现在有一个很棒的插件gradle-extra-configurations-plugin。它提供了一个providedoptional范围。不再需要手动管道,并且在发布时也会生成所需的元数据,例如发布到 maven 存储库。

于 2015-09-26T12:07:01.863 回答
4

演出有点晚了,使用 gradle 将 .jar 复制到 libs 文件夹,并在 gradle 文件中拥有:

dependencies {
 ....
 provided files('libs/someLibrary')
 ....
}
于 2014-11-10T13:15:16.793 回答
2

有一个prodeps插件,它为 Gradle 添加了额外的可选和提供的依赖配置

...
apply plugin: 'propdeps'
...
buildscript {
    repositories {
        maven { url 'http://repo.spring.io/plugins-release' }
    }
    dependencies {
        classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7'
    }
}
...
dependencies {
    ...
    provided('android:android:2.2_r3')
    ...
}
...
于 2015-09-26T10:09:05.350 回答