Gradle:同一个项目上的Java和Android子项目
TL;DR:开发纯Java和Android应用程序的唯一方法是在完全不同的Gradle项目上吗 我正在开发一个项目,其中包括一个Android应用程序和一个Java后端(以及一些其他常见的API)。Gradle:同一个项目上的Java和Android子项目,java,android,intellij-idea,gradle,Java,Android,Intellij Idea,Gradle,TL;DR:开发纯Java和Android应用程序的唯一方法是在完全不同的Gradle项目上吗 我正在开发一个项目,其中包括一个Android应用程序和一个Java后端(以及一些其他常见的API)。 作为IDE,我使用IntelliJ Idea。 我希望有一个单一的Gradle项目(将在单个Idea实例上打开),其中包含所有作为子项目的应用程序 我的问题是为了允许Android插件,我需要在build.gradle文件的buildScript部分设置它: dependencies { c
作为IDE,我使用IntelliJ Idea。
我希望有一个单一的Gradle项目(将在单个Idea实例上打开),其中包含所有作为子项目的应用程序 我的问题是为了允许Android插件,我需要在
build.gradle
文件的buildScript
部分设置它:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
这会在整个Gradle构建过程中强制使用android插件,并在纯Java子项目上导致错误(它们会自动设置为使用android SDK而不是Java SDK构建)
我想到的一个解决方法是创建两个独立的项目(一个用于Android,一个用于Java),将公共JAR导出到本地Maven存储库中,然后将其导入Android项目
有没有更好的解决方案可以让我将所有代码都放在同一个地方?每个项目都有自己的buildscript类路径 root/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'
}
我不是安卓用户,但可能需要调整纯java项目上的任务,使编译器分叉并使用不同的
javac
allprojects {
if (plugins.hasPlugin('java') && !plugins.hasPlugin('android')) {
tasks.withType(JavaCompile) {
options.fork = true
options.forkOptions.executable = '/path/to/javac'
}
}
}
您所要求的是可能的:您只需要将buildscript声明从项目移动到android模块 项目
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
}
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
}
Android模块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
}
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,可能会使用自己的插件、存储库和依赖项声明自己的构建脚本。您可以使用android Studio在单个项目中创建android和java模块。对于android gradle,使用
apply plugin:'com.android.application'
对于java gradle,使用apply plugin:'java'
这将不起作用:我收到一条消息:未找到id为'com.android.application'的插件。
只有将com.android.tools.build:gradle:2.2.3
添加到buildGradle节内的类路径依赖项。是。应该将其添加到项目级gradle文件中这是我试图避免的:这样设置类路径,会强制所有项目使用Android插件,而不是Java插件。那么我想最好使用两个不同的项目。找到其他方法将它们相互链接。e、 也许我做错了什么,但这仍然迫使所有项目使用Android插件类路径。下面是root/build.gradle
的样子:所有项目{group'com.navnplay'应用插件:'idea'存储库{mavenCentral()}}project(':navnplay app'){buildscript{repositories{jcenter()}依赖项{classpath'com.android.tools.build:gradle:2.3'}}
很难说。。。但我认为您正在allprojects
闭包中设置buildscript
,它。。。顾名思义。。。影响所有项目buildscript
肯定在项目部分,而不是allprojects
部分。