有人可以给我的我怎么能指定编译只是时间未包含在运行时部署(战争)类的简单的build.gradle例子。
摇篮似乎因为“运行时”已经得到解决,这种错误的方式从“编译”继承。 我无法想象一个情况,我想在运行时类,我不希望在编译时。 不过,也有很多情况下,我需要的类在编译时产生的代码,我不希望在运行时部署!
我已经通过了臃肿的gradle这个文档耕种,但无法找到任何明示或实例。 我怀疑这可能通过定义一个“配置”,将其设置为CompileJava插件的类路径来实现 - 但文档达不到讲解如何实现这一目标。
Answer 1:
已经有关于这个话题的讨论很多,主要是在这里 ,但没有明确的结论。
你是在正确的轨道上:目前最好的解决办法是声明自己provided
的配置,包括这将汇编只依赖,并添加到您的编译类路径:
configurations{
provided
}
dependencies{
//Add libraries like lombok, findbugs etc
provided '...'
}
//Include provided for compilation
sourceSets.main.compileClasspath += [configurations.provided]
// optional: if using 'idea' plugin
idea {
module{
scopes.PROVIDED.plus += [configurations.provided]
}
}
// optional: if using 'eclipse' plugin
eclipse {
classpath {
plusConfigurations += [configurations.provided]
}
}
通常,这工作得很好。
Answer 2:
如果您使用的战争插件, providedCompile
应该做的伎俩。 不过,如果你需要从被包含在一个罐子里排除依赖,你就必须延长jar
任务。 下面是不含depndencies标记为构建“脂肪罐”或“超级罐”(单罐,其包括它的依赖的所有类)的例子provided
:
configurations {
provided
compile.extendsFrom provided
}
dependencies {
provided "group.artifact:version"
compile "group.artifact:version"
}
jar {
dependsOn configurations.runtime
from {
(configurations.runtime - configurations.provided).collect {
it.isDirectory() ? it : zipTree(it)
}
}
}
信用: http://kennethjorgensen.com/blog/2014/fat-jars-with-excluded-dependencies-in-gradle/
更新:
由于摇篮2.12的定义只编译依赖的问题终于解决了通过新的“copmpileOnly”配置一个简单而自然的方式:
dependencies {
compileOnly 'javax.servlet:servlet-api:2.5'
}
Answer 3:
我想通了我的项目设置。 我使用Android工作室与gradle这个插件运行0.9 +与gradle这个1.11的主要项目使用亚马逊的广告和亚马逊应用程式内购买。 这取决于使用亚马逊设备消息(ADM)库项目。
我的主要问题是与在那里我得到了在ADM“的RuntimeException:存根” 错误。
1)图书馆工程:“提供的配置”由卢卡斯提出不工作,由他说,所以我用理查兹的办法,然而这并没有工作,以及开箱即用。 我不得不改变了一点,因为我无法找到在AAR文件的文件夹ext_libs的lib。 摇篮似乎收拾libs文件夹中的所有库的最终AAR文件。
android.libraryVariants.all { variant ->
variant.packageLibrary.exclude( 'libs/amazon-device-messaging-1.0.1.jar' )
}
2)申请项目:在这里,用“提供的配置”的方式工作。
configurations{
provided
}
dependencies {
compile 'fr.avianey:facebook-android-api:+@aar'
compile files('ext_libs/amazon-ads-5.3.22.jar')
compile files('ext_libs/in-app-purchasing-1.0.3.jar' )
provided files('ext_libs/amazon-device-messaging-1.0.1.jar')
}
android.applicationVariants.all {
variant -> variant.javaCompile.classpath += configurations.provided
}
Answer 4:
这是很常见的运行时依赖未编译时的依赖。 其他的方式是一个相当特殊的情况,因此需要配置的摇篮几行。 我建议搜索摇篮论坛的provided
。
这听起来像你真正后声明依赖于您的构建 ,而不是为编译类路径。 如何做到这一点取决于所期望的功能如何得到调用(Ant任务,摇篮任务/插件,即席从构建脚本中使用)。 如果你提供你正在尝试做更详细的信息,我可以提供一个更具体的答案。
下面是一些链接到摇篮用户手册中的相关信息:
Answer 5:
如果您使用WAR插件,你可以使用providedCompile
如本例
dependencies {
compile module(":compile:1.0") {
dependency ":compile-transitive-1.0@jar"
dependency ":providedCompile-transitive:1.0@jar"
}
providedCompile "javax.servlet:servlet-api:2.5"
providedCompile module(":providedCompile:1.0") {
dependency ":providedCompile-transitive:1.0@jar"
}
runtime ":runtime:1.0"
providedRuntime ":providedRuntime:1.0@jar"
testCompile "junit:junit:4.11"
moreLibs ":otherLib:1.0"
}
Answer 6:
在摇篮2.12 compileOnly
配置已经出台。 博客文章介绍这个功能可以在这里找到:
摇篮的最新功能:编译仅依赖
请注意一个重要的副作用:
由于添加了“compileOnly”配置的结果是,“编译”的配置不再代表所有的全貌编译时间依赖性。 当需要引用构建脚本或自定义插件编译类路径,适当的源集的compileClasspath财产应改为使用。
Answer 7:
事实证明,他们在gradle这个Android插件0.8.0增加了“提供的”配置,但它不是做得比较工作。 它提供的库会自动添加到编译路径,但它也包括他们在最后的AAR / APK。
什么工作对我来说是由@卢卡斯 - hanaceck而是从“提供”给任何其他自定义名称更改名称提供的解决方案。 在我而言,这是一个图书馆项目,这是我的最终版本的Android应用程序项目的依赖。 继承人为我工作要点。
configurations {
providedlibs
}
dependencies {
providedlibs files('provided/library.jar')
}
libraryVariants.all {
variant -> variant.javaCompile.classpath += configurations.providedlibs
}
它编译完美和提供/ library.jar不包含在最终的apk。 我遇到的唯一问题是通知library.jar存在的Android的工作室。 这个想法插件似乎并没有为Android工作室工作。 即时猜测他们有与工作室的gradle同步另一个自定义插件。
Answer 8:
我没有找到针对Android Studio中的一个解决方案,但这个是我的尝试:
在Android Studio中,我不得不更新到0.5版本。+
在gradle产出/ gradle-wrapper.properties更换
distributionUrl=http\://services.gradle.org/distributions/gradle-1.9-rc-3-bin.zip
通过
distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-all.zip
在我所有的build.gradle更换
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.7.+'
}
}
通过
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
在图书馆,我想利用提供
configurations {
provided
}
//put applicationVariants in case it is apply plugin: 'android' and not apply plugin: 'android-library'
android.libraryVariants.all {
variant -> variant.javaCompile.classpath += configurations.provided
}
dependencies {
provided files('ext_libs/amazon-device-messaging-1.0.1.jar')
}
在它不工作的结束,似乎它适用于JAR而不是AAR或APK这里说https://groups.google.com/forum/#!topic/adt-dev/WIjtHjgoGwA
Answer 9:
在Android Studio中1.0做到这一点:
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
output.packageLibrary.exclude('libs/someLib.jar')
}
}
Answer 10:
我们不需要“规定”,尝试添加此:
android.libraryVariants.all { variant ->
variant.packageLibrary.exclude( 'ext_libs/amazon-device-messaging-1.0.1.jar' )
}
请享用!
Answer 11:
该OP显然没有找一个Android的答案,但一些答案是具体到Android。 因此,我建议你看看这个页面: http://tools.android.com/tech-docs/new-build-system
0.9.0版本推出的提供范围。 因此,只要使用
dependencies {
provided "groupId:artifcatId:version"
}
文章来源: How do I define a compile-time *only* classpath in Gradle?