目前,我的build.gradle依赖于使用Ant构建的外部库。为了完成库的构建,我遵循了建议here并创建了一个构建外部库的任务,并将其复制到libs /文件夹。
该任务作为dependency
:
的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结束,我已经链接到我遇到问题的特定提交:Source Repository
答案 0 :(得分:2)
好吧,花了一段时间才得到我很满意的版本。但是,这是改变了什么。
JAR的实际构建是使用相同的样式构建的,但是移动到外部项目(因此主构建项目没有达到它)。我将在下面给出一个深入的解释,但提交是here和here。这些都是有序的。
基本上,我们将jar导出为其他项目可以依赖的工件,而不是自己复制Jar。这样,Ant构建运行,其他项目可以看到我们刚刚创建的Jar。这是第一次提交的结束。在第二次提交中,任务输出被标记为仅在Jar不存在时才需要重新生成。这是因为每当我尝试构建应用程序时,重新生成Jar需要几分钟,然后还必须重新打包其他所有内容。代码如下:
build.gradle 外部项目
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
}
}
然后,主项目只需将此项目添加为编译时依赖项:
build.gradle 主要项目
compile project(path: ':jsword-minimalbible', configuration: 'buildJSword')
希望这对遇到类似问题的人有所帮助,如果您有任何疑问请与我联系!
注意:构建当前没有正确清理自己,因此如果更改外部项目中的任何代码,则需要删除外部Jar以便正确重新生成所有内容。