如何从Android应用程序和java应用程序导入gradle java模块

时间:2017-02-19 15:29:41

标签: android android-studio intellij-idea gradle android-gradle

我有一个包含服务器和Android应用程序的项目,服务器是基于java的。我想为服务器和android应用程序使用的常见Java代码创建一个gradle模块,我创建了一个通用模块作为gradle java模块,似乎我可以将这个模块作为依赖从服务器和服务器导入Android应用程序。 我的问题是虽然gradle构建成功,但intellij无法从android应用程序中的java模块中找到依赖项。 有没有办法做我正在尝试的事情,或者也许intellij不支持它?

1 个答案:

答案 0 :(得分:1)

如果您具有由appservercommon模块组成的以下配置:

project/
├── app/
│   ├── build.gradle
│   └── src
├── server/
│   ├── build.gradle
│   └── src
├── common/
│   ├── build.gradle
│   └── src
├── build.gradle
└── settings.gradle

settings.gradle包含模块列表:

include ':app',':server',':common'

如果模块之间有更多子目录,如:

project/
├── server/
│   ├── subfolder
         ├── build.gradle

您的settings.gradle看起来像是:

include ':app',':server',':common'
project(':server').projectDir = new File('subfolder/server')

顶级build.gradle包含在类路径com.android.tools.build:gradle:X.X.XX中:

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

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

您的应用build.gradle拥有com.android.application插件,其中包含servercommon模块的依赖关系。这是app模块的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':server')
    compile project(':common')
}

servercommon模块是java模块,可以在Android项目中使用,也可以在带有java插件的Java项目(在intellij-idea中)中使用。这是servercommon模块的build.gradle

apply plugin: 'java'

dependencies {
    //for server module common module dependency :
    //compile project(':common')
}

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

compileJava {
    sourceCompatibility = "1.7"
    targetCompatibility = "1.7"
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}