如何在Gradle构建中使用jar文件的提供范围?

Ben*_*min 39 scope gradle

我需要在我的应用中使用亚马逊地图和亚马逊消息.

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

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

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

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

mko*_*bit 55

Gradle2.12版本中,compileOnly添加了与provided范围类似的功能.测试类路径中发生的情况有所不同.以下是发行说明中的​​相关引用和摘录:

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

应仅将编译依赖项分配给相关源集的"compileOnly"配置.

dependencies {
    compileOnly 'javax.servlet:servlet-api:2.5'
}
Run Code Online (Sandbox Code Playgroud)

  • 实际“提供”功能所需的“testCompile”附加依赖项。 (2认同)

Mic*_*ryl 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
Run Code Online (Sandbox Code Playgroud)

如果您不是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'
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你使用intellij-idea和`apply plugin:'idea'` add:`idea {module {scopes.PROVIDED.plus + = [configurations.provided]}}`这将迫使想法在提供的类中表现正确. (2认同)
  • 项目的构建取决于你在哪个IDE工作?我认为我们应该使用工具,而不是我们.这里奇怪...... (2认同)

tho*_*est 8

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