Gradle找不到方法compile()的参数。

14

我有一个全屏的Hello World Android Studio 1.5.1应用程序,我添加了一个Gradle / Eclipse-Mars子项目。除了将include ': javalib'添加到settings.gradle之外,没有修改任何其他文件。添加了一个项目库依赖

project(':app') {
    dependencies {
        compile project(':javalib') // line 23
    }
}

在命令行中运行gradle时,去到根构建构建文件,得到以下信息:

  • 位置: 构建文件'D:\AndroidStudioProjects\AndroidMain\build.gradle'的第23行

  • 出现了什么问题: 评估根项目'AndroidMain'时出现问题。

    无法找到方法compile()对于org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@463ca82f的参数[project':javalib']。

向根构建文件添加java插件没有起到作用。

我认为它不在错误的位置

根项目和添加的子项目都有gradle包装程序。

将不胜感激地接受任何提示。

谢谢

编辑:为了澄清,根构建文件是:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
    task hello << { task -> println "I'm $task.project.name" }
}

project(':app') {
    dependencies {
        //compile project(':javalib') // causes problems
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

应用程序构建文件为:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "acme.androidmain"
        minSdkVersion 22
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //compile project(':javalib') // use :javalib:jar?
    //testCompile project(':javalib')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
}

编辑:这个练习的整个目的是将核心Java代码放入Android项目中。目前,核心代码是一个独立的Gradle / Eclispe项目。我在Android项目中有一批执行 gradle -p standaloneprojectdir/ jar 并复制jar到libs/ 的命令。

我认为除了发布jar并从存储库获取之外,可能还有更简单的方法,因为所有这些都在我的电脑上完成。

只需构建就可以拥有所有代码会很好:(

编辑:根据RaGe的建议,这里有一个原始的Android Studio项目和一个原始的Gradle / Eclipse项目。这些文件未经过编辑。如果您选择接受,则需要使Android应用程序轻松访问Java项目类(例如,在MainActivity.onCreate()中使用new Library();将编译并运行)。我不在乎Java项目位于何处。理想情况下,两个源都可以在两个IDE中实时使用。

尝试这个也失败了。说:>无法找到:virginjavaproject,但目录确实存在。

编辑:实际上起作用的是RaGe对原始的Android项目的拉取请求。


Java插件不适用于Android项目,但你应该在某个地方拥有Android插件,它会添加编译配置。你是使用Android Studio创建的项目吗? - RaGe
是的,在应用程序构建文件中有一个。请参见编辑。 - Ray Tayek
root/ 目录下有 app/ 和 javalib/ 两个子目录 - root 和 app 是由 Android Studio 创建的,而 javalib 是我手动添加的一个独立 Gradle/Eclipse 项目的克隆。 - Ray Tayek
是的,根目录下的 settings.gradle 文件中包含以下内容:include ':app' 和 include ':javalib'。 - Ray Tayek
你在应用程序的 build.gradle 中已经有了一个编译 javalib,为什么要在根目录的 build.gradle 中重复呢? - RaGe
显示剩余3条评论
5个回答

4

你已经拥有

compile project(':javalib') 

在你的:app项目中,你不必在根build.gradle中注入依赖项。如果你仍然想要从根build.gradle中进行注入,正确的方式是:

configure(':app') {
    dependencies {
        compile project(':javalib') // causes problems - NOT ANYMORE!
    }
}

这里说的是 Virgin Android Studio 在技术上的优势点。


我已经在应用程序构建文件中编译了它。删除它没有帮助。 - Ray Tayek
1
从应用程序构建文件中删除编译,并在根构建文件中将我的project() { ...}替换为您的configure() { ...},仍然无法通过编译行。 configure的文档在哪里? - Ray Tayek
你能展示一下你的settings.gradle文件吗?配置请参考[这里的文档](https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:configure(java.lang.Iterable, groovy.lang.Closure))。 - RaGe
根目录下的setting.gradle文件内容为:include ':app',javalib目录下的setting.gradle文件内容为:rootProject.name = 'javalib'。感谢提供文档。 - Ray Tayek
你能试着删除 javeLib/ 中的 settings.gradle 文件吗? - RaGe
显示剩余10条评论

1
我们有两个名为 "build.gradle" 的文件。请确保您已将您的 "编译代码" 复制到位于"app"文件夹内的 build.gradle 文件中。

0
只需将此代码粘贴到 build.gradle(Project:"Your prject name") 文件中即可。
 // Top-level build file where you can add configuration options common to all sub-projects/modules.

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

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
     }
 }

   allprojects {
repositories {
    jcenter()
   }
}

task clean(type: Delete) {
delete rootProject.buildDir
}

0

正如@peter-niederwieser所述:

构建脚本混淆了构建脚本依赖项(即构建本身的依赖项;通常这意味着Gradle插件)和常规依赖项(即要编译/运行的代码的依赖项)。后者需要放在dependencies { ... }中,而不是buildscript { dependencies { ... } }中。除了classpath依赖项之外,其他都是常规依赖项。

还请查看:无法找到方法compile()的Gradle参数


1
依赖项不在构建脚本中。 - Ray Tayek

0

我曾经遇到过这个问题,但是是在我的自己的库中。正确编译的方法是:

compile project(path: ':MyLib')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接