Java 动态地将JAR添加到Gradle依赖项
目前,my build.gradle依赖于使用Ant构建的外部库。为了完成构建库的工作,我按照建议创建了一个任务来构建外部库,并将其复制到libs/文件夹中 该任务作为Java 动态地将JAR添加到Gradle依赖项,java,android,ant,gradle,android-studio,Java,Android,Ant,Gradle,Android Studio,目前,my build.gradle依赖于使用Ant构建的外部库。为了完成构建库的工作,我按照建议创建了一个任务来构建外部库,并将其复制到libs/文件夹中 该任务作为依赖项的一部分调用: build.gradle dependencies { compile fileTree('libs') { include '*.jar' builtBy 'myTask' } } task myTask (type: GradleBuild) { Grad
依赖项的一部分调用
:
build.gradle
dependencies {
compile fileTree('libs') {
include '*.jar'
builtBy 'myTask'
}
}
task myTask (type: GradleBuild) { GradleBuild antBuild ->
antBuild.buildFile('external-stub.gradle')
antBuild.tasks = ['clean', 'ivy.check', 'ivy.download', 'ivy.task', 'ivy',
'init', 'mergeCode', 'compile', 'jar', 'copyJarsToProject']
}
然而,当编译实际运行时,我刚刚构建和复制的库不包括在依赖项中,大量编译错误就证明了这一点
我把图书馆放错地方了吗
完整build.gradle和相关文件已在Github上完成,我已链接到我遇到问题的特定提交:好吧,我花了一段时间才获得一个我满意的构建。但是,这里有一些改变 JAR的实际构建是使用相同的样式构建的,但是移动到了外部项目(这样主构建项目就不会涉及到它)。下面我将给出一个深入的解释,但是提交是和。这些都是正确的 基本上,我们将jar导出为其他项目可以依赖的工件,而不是自己在jar上复制。这样,Ant构建运行和其他项目可以看到我们刚刚创建的Jar。这是第一次提交的结束。在第二次提交中,任务输出被标记为仅当Jar不存在时才需要重新生成。这是因为每当我尝试构建应用程序时,都需要几分钟来重新生成Jar,然后还要重新打包其他所有内容。代码如下: build.gradle外部项目 然后,主项目只需将此项目添加为编译时依赖项: build.gradle主项目 希望这对任何有类似问题的人都有帮助,如果有问题请告诉我
注意:构建当前未正确清理自身,因此,如果您更改外部项目中的任何代码,则需要删除外部Jar,以便所有内容都能正确地重新生成自身。请注意,如果构建Jar预先存在于libs/目录中,则构建可以正常工作。也就是说,从一个干净的工作树开始,构建失败。失败后重新尝试构建是成功的,因为外部jar已经构建。为项目声明的依赖项在该项目之外没有任何影响,更不用说在该构建之外了。我理解。任务是构建外部库,该库将复制到当前项目。从理论上讲,当前项目应该依赖于刚刚生成的库。作为一个快速更新:使用Gradle 2需要我们将名称从doBuildJSword更改为compileJava
s/doBuildJSword/compileJava/
足以执行更改。
configurations {
buildJSword
}
task doBuildJSword (type: GradleBuild) {
buildFile = 'jsword-stub.gradle'
tasks = ['clean', 'ivy.check', 'ivy.download', 'ivy.task', 'ivy',
'init', 'mergeCode', 'compile', 'jar'] //, 'copyJarsToMinimalBible']
ext.outputJar = file('distribution/jsword.jar')
outputs.upToDateWhen {
ext.outputJar.exists()
}
}
artifacts {
buildJSword(doBuildJSword.ext.outputJar) {
builtBy doBuildJSword
}
}
compile project(path: ':jsword-minimalbible', configuration: 'buildJSword')