2015-05-05 90 views
0

我使用的是Android的科尔多瓦4.0.0它使用gradle这个包装打造时指定不同的储存库。我需要指定与mavenCentral不同的存储库。我不能简单地修改build.gradle文件,因为它是由Cordova自动生成的。因为它使用的是Cordova指定的包装分发,所以我不能在分发中添加/init.d。我试着加入USER_HOME/.gradle/init.gradle文件,它似乎并没有被习惯。有没有其他的方式来指定一个初始化文件,当使用我没有控制权的包装?使用的gradle科尔多瓦包装

编辑: 作为一种解决方法,现在我添加了一个after_prepare挂钩,它将build.gradle文件中任何位置的文本“mavenCentral()”更改为我需要使用的存储库。我们有了一个更好的基于的Gradle虽然解决方案...

回答

1

我们使用的离子和有我们的,我们用的不是自己的mavenCentral承上启下库。我们结束了创建一个钩加入了钩来解决这个open issue

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; 
} 
0

您指定的gradle这个初始化脚本https://docs.gradle.org/current/userguide/init_scripts.html

像这种额外的Maven的回购协议:

allprojects { repositories { maven { credentials { username 'your_user_name' password 'your_password' } url "https://your_repo" } maven { url "http://download.01.org/crosswalk/releases/crosswalk/android/maven2/" } } }

+0

我的问题解释说,使用一个init脚本不可的选项(对于init.d)或不工作(init.gradle)。 – SunshinyDoyle

0

这可以工作进行的方式似乎随着时间而改变。 Cordova/Phonegap的表现让我很困难。然而,这目前对我的作品:

  • 创建build.gradle文件或复制一个从新制作的Android Studio项目 - 你知道,它喜欢在默认情况下把jcenter()那里。下面的例子。
  • 它在类型gradleReference添加到您的plugin.xml文件作为定制的“框架”,在你的Android平台的标签。下面的例子。
  • ,而我在它 - 如果你需要其他gradle这个更改,例如Java语言水平,你可以包括build-extras.gradle文件以及来调整其他设置(不知道这些都需要单独的诚实,但我已经到了我的皮带的尽头,试图处理这件事情)。下面的例子。是的,目标目录必须是src/..

样品build.gradle文件:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

dependencies { 
    compile 'net.example:some-sdk:2.3.1' 
} 

样品plugin.xml

<?xml version="1.0" encoding="UTF-8"?> 
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="io.proxsee" version="0.1.0"> 
    <!-- When you update this file, update the package.json too. --> 
    <!-- Reference: https://cordova.apache.org/docs/en/latest/plugin_ref/spec.html --> 
    <!-- .. other stuff .. --> 
    <platform name="android"> 
     <!-- .. other stuff .. --> 
     <framework src="build.gradle" custom="true" type="gradleReference" /> 
     <source-file src="build-extras.gradle" target-dir="src/.." /> 
    </platform> 
</plugin> 

样品build-extras.gradle

ext.postBuildExtras = { 
    android { 
     compileOptions { 
      sourceCompatibility JavaVersion.VERSION_1_7 
      targetCompatibility JavaVersion.VERSION_1_7 
     } 
     packagingOptions { 
      exclude 'META-INF/ASL2.0' 
      exclude 'META-INF/LICENSE' 
      exclude 'META-INF/NOTICE' 
      exclude 'META-INF/maven/com.squareup/javawriter/pom.xml' 
      exclude 'META-INF/maven/com.squareup/javawriter/pom.properties' 
     } 
    } 
}