繁体   English   中英

Gradle:同一项目中的Java和Android子项目

[英]Gradle: Both Java and Android Subprojects on Same Project

TL; DR:是开发纯Java和Android应用程序的唯一方法,是完全不同的Gradle项目吗?

我正在开发一个项目,其中包括一个Android应用程序和一个Java后端(以及一些其他常见的API)。
作为IDE,我使用的是IntelliJ Idea。
我想有一个Gradle项目(将在一个Idea实例上打开),它包含所有应用程序作为子项目。

我的问题是,为了让Android插件,我需要将其设置在buildScriptbuild.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM