Android Studio 中缺少模块并且 Gradle 同步失败
Module missing in Android Studio and Gradle sync fails
我已经在 Android Studio 1.1 RC 1 中建立了一个全新的项目:
- 创建了一个 Android 项目 [app](因为无法立即创建 App Engine 后端项目)。
- 通过首先创建新的 App Engine 模块然后手动导入文件 [backend] 添加了现有的后端模块。
- 删除了 Android 应用程序模块 [app]。
- 添加了一个Java库模块,同样的过程,首先创建一个新模块,然后导入文件[common]。
编译一切正常,但 Android Studio 有两个问题:
- 当我查看 Project Structure 时,左窗格中缺少 [common] 模块,但它仍作为引用模块出现在右窗格中!?
- 我的项目树看起来很好,所有模块都被识别,但是 gradle 告诉我同步失败。
Gradle 表示 "Task '' not found in root project"('' 看起来是空字符串)。当 运行 来自终端时,我在日志中收到一个警告和一个异常,但它似乎不相关(与索引相关),所以我没有在这里包含它。
settings.gradle 指定了两个模块:
include ':backend', ':common'
我试图将主项目的 .iml 文件与包含两个模块的假文件交换,结果(除了多个副作用)两个模块都在那里。 (因为副作用,我恢复了原来的状态。)
这是我的 gradle 个文件:
根模块:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.1'
}
}
allprojects {
repositories {
jcenter()
}
}
[后端]
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.appengine:gradle-appengine-plugin:1.9.17'
}
}
repositories {
jcenter();
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
dependencies {
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.17'
compile 'com.google.appengine:appengine-endpoints:1.9.17'
compile 'com.google.appengine:appengine-endpoints-deps:1.9.17'
compile 'javax.servlet:servlet-api:2.5'
compile 'com.googlecode.objectify:objectify:5.1.3'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'io.jsonwebtoken:jjwt:0.4'
compile project(':common')
}
appengine {
downloadSdk = true
appcfg {
oauth2 = true
}
endpoints {
getClientLibsOnBuild = true
getDiscoveryDocsOnBuild = true
}
}
[普通]
apply plugin: 'java'
task sourcesJar(type: Jar, dependsOn:classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives sourcesJar
}
dependencies {
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
compile 'com.google.code.gson:gson:2.3.1'
}
apply plugin: 'maven'
group = 'cc.closeup'
version = 'v2-2.0-SNAPSHOT'
install {
repositories.mavenInstaller {
pom.artifactId = 'common'
pom.packaging = 'jar'
}
}
有什么想法吗?您还想在这里看到什么?
我的错误是我删除了 [app]。似乎如果您创建一个 App Engine 后端模块,您必须在同一个项目中保留一个 "fake" 前端模块以保持 Android Studio/gradle 快乐。
在早期的 Android Studio 版本中,可以毫无问题地删除前端模块,但似乎 Google 已经以某种方式锁定了它。当我保留假的前端模块时它仍然有效。
--
为什么我这样配置?在我的配置中,我在不同的项目中有后端和前端模块,我让后端项目将库安装到本地 Maven 中,然后我在我的前端项目中获取这些库(对于一个团队,你会选择本地 Maven 服务器)。这种配置有很多好处,比如我可以同时在两个屏幕上测试 backend/frontend 而无需一直来回切换。一些公司可能还希望此配置保持其后端代码独立和安全。
如果你只想建立一个AE项目。您可以尝试本教程以获取 intellij idea jetbrains.com/idea/help/creating-google-app-engine-project.html
我已经在 Android Studio 1.1 RC 1 中建立了一个全新的项目:
- 创建了一个 Android 项目 [app](因为无法立即创建 App Engine 后端项目)。
- 通过首先创建新的 App Engine 模块然后手动导入文件 [backend] 添加了现有的后端模块。
- 删除了 Android 应用程序模块 [app]。
- 添加了一个Java库模块,同样的过程,首先创建一个新模块,然后导入文件[common]。
编译一切正常,但 Android Studio 有两个问题:
- 当我查看 Project Structure 时,左窗格中缺少 [common] 模块,但它仍作为引用模块出现在右窗格中!?
- 我的项目树看起来很好,所有模块都被识别,但是 gradle 告诉我同步失败。
Gradle 表示 "Task '' not found in root project"('' 看起来是空字符串)。当 运行 来自终端时,我在日志中收到一个警告和一个异常,但它似乎不相关(与索引相关),所以我没有在这里包含它。
settings.gradle 指定了两个模块:
include ':backend', ':common'
我试图将主项目的 .iml 文件与包含两个模块的假文件交换,结果(除了多个副作用)两个模块都在那里。 (因为副作用,我恢复了原来的状态。)
这是我的 gradle 个文件:
根模块:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.1'
}
}
allprojects {
repositories {
jcenter()
}
}
[后端]
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.appengine:gradle-appengine-plugin:1.9.17'
}
}
repositories {
jcenter();
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
dependencies {
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.17'
compile 'com.google.appengine:appengine-endpoints:1.9.17'
compile 'com.google.appengine:appengine-endpoints-deps:1.9.17'
compile 'javax.servlet:servlet-api:2.5'
compile 'com.googlecode.objectify:objectify:5.1.3'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'io.jsonwebtoken:jjwt:0.4'
compile project(':common')
}
appengine {
downloadSdk = true
appcfg {
oauth2 = true
}
endpoints {
getClientLibsOnBuild = true
getDiscoveryDocsOnBuild = true
}
}
[普通]
apply plugin: 'java'
task sourcesJar(type: Jar, dependsOn:classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives sourcesJar
}
dependencies {
compile 'com.google.http-client:google-http-client-android:1.18.0-rc'
compile 'com.google.code.gson:gson:2.3.1'
}
apply plugin: 'maven'
group = 'cc.closeup'
version = 'v2-2.0-SNAPSHOT'
install {
repositories.mavenInstaller {
pom.artifactId = 'common'
pom.packaging = 'jar'
}
}
有什么想法吗?您还想在这里看到什么?
我的错误是我删除了 [app]。似乎如果您创建一个 App Engine 后端模块,您必须在同一个项目中保留一个 "fake" 前端模块以保持 Android Studio/gradle 快乐。
在早期的 Android Studio 版本中,可以毫无问题地删除前端模块,但似乎 Google 已经以某种方式锁定了它。当我保留假的前端模块时它仍然有效。
--
为什么我这样配置?在我的配置中,我在不同的项目中有后端和前端模块,我让后端项目将库安装到本地 Maven 中,然后我在我的前端项目中获取这些库(对于一个团队,你会选择本地 Maven 服务器)。这种配置有很多好处,比如我可以同时在两个屏幕上测试 backend/frontend 而无需一直来回切换。一些公司可能还希望此配置保持其后端代码独立和安全。
如果你只想建立一个AE项目。您可以尝试本教程以获取 intellij idea jetbrains.com/idea/help/creating-google-app-engine-project.html