我正在使用 Cordova Android 4.0.0,它使用 gradle 包装器来构建。我需要指定与 mavenCentral 不同的存储库。我不能简单地修改 build.gradle 文件,因为它是由 Cordova 自动生成的。因为它使用的是 Cordova 指定的包装器分布,所以我无法将/init.d 添加到分布中。我试过添加一个 USER_HOME/.gradle/init.gradle 文件,它似乎没有被使用。使用我无法控制的包装器时,还有其他方法可以指定初始化文件吗?
编辑: 作为目前的解决方法,我添加了一个 after_prepare Hook ,该 Hook 将在 build.gradle 文件中的任何位置找到的文本“mavenCentral()”更改为我需要使用的存储库。不过,必须有一个更好的基于 gradle 的解决方案......
最佳答案
我们使用 ionic 并拥有我们自己的 nexus 存储库,我们使用它来代替 mavenCentral。我们最终创建了一个钩子(Hook)来解决这个 open issue
通过添加一个钩子(Hook):
module.exports = function(ctx) {
'use strict';
var fs = ctx.requireCordovaModule('fs'),
path = ctx.requireCordovaModule('path'),
deferral = ctx.requireCordovaModule('q').defer(),
replaceStream = require('replacestream'),
async = require('async');
var platformRoot = path.join(ctx.opts.projectRoot, 'platforms/android');
var gradleFiles = [path.join(platformRoot, 'build.gradle'), path.join(platformRoot, 'CordovaLib', 'build.gradle')];
async.each(gradleFiles, function(f, cb) {
fs.readFile(f, 'utf8', function(err, data) {
if (err) {
cb(err);
return;
}
var result = data.replace(/mavenCentral\(\)/g, 'maven{url "http://nexus.corp.aal.au/content/groups/public-ad"}');
fs.writeFile(f, result, 'utf8', cb);
});
}, function(err) {
if (err) {
deferral.reject();
} else {
deferral.resolve();
}
});
return deferral.promise;
}
关于android - 使用 Cordova gradle wrapper 时指定不同的存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062984/