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项目中。
是否有更好的解决方案可以让我将所有代码库放在同一个地方?
答案 0 :(得分:0)
每个项目都有自己的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'
}
答案 1 :(得分:0)
我不是Android用户,但您可能需要在仅限Java的项目上调整JavaCompile任务,以便编译器分叉并使用不同的javac
allprojects {
if (plugins.hasPlugin('java') && !plugins.hasPlugin('android')) {
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.executable = '/path/to/javac'
}
}
}
答案 2 :(得分:0)
您要求的是:您只需要将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,存储库和依赖项声明自己的构建脚本。