[英]Gradle: Both Java and Android Subprojects on Same Project
TL; DR:是开发纯Java和Android应用程序的唯一方法,是完全不同的Gradle项目吗?
我正在开发一个项目,其中包括一个Android应用程序和一个Java后端(以及一些其他常见的API)。
作为IDE,我使用的是IntelliJ Idea。
我想有一个Gradle项目(将在一个Idea实例上打开),它包含所有应用程序作为子项目。
我的问题是,为了让Android插件,我需要将其设置在buildScript
节build.gradle
文件:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
这会强制Android插件进入整个Gradle构建过程,并导致纯Java子项目出错(它们会自动设置为使用Android SDK而不是Java SDK构建)。
我想到的一个解决方法是创建两个单独的项目(一个用于Android,一个用于Java),将公共JAR导出到本地Maven存储库并将其从那里导入到Android项目中。
有没有更好的解决方案可以让我在同一个地方拥有所有代码库?
每个项目都有自己的buildscript类路径
根/的build.gradle
project(':java-project') {
apply plugin: 'java'
}
project(':andoid-project') {
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
}
apply plugin: 'android'
}
我不是一个Android用户,但也许您需要在仅Java项目上调整JavaCompile任务,以便编译器分叉并使用不同的javac
allprojects {
if (plugins.hasPlugin('java') && !plugins.hasPlugin('android')) {
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.executable = '/path/to/javac'
}
}
}
您要求的是:您只需要将buildscript声明从项目移动到android模块。
PROJECT build.gradle
可能如下所示:
buildscript {
// nothing for the project
}
allprojects {
repositories {
jcenter() // you could also move this to each module
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Android MODULE build.gradle
可能如下所示:
apply plugin: 'com.android.application'
// other pluguins
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
// other dependencies for the build (apt, retrolambda...)
}
}
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "my.android.app"
// additional config...
}
}
dependencies {
// your app dependencies here
}
其他模块(如后端或Web)可以使用自己的pluguins,存储库和依赖项声明自己的构建脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.