简体   繁体   English

如何使用Groovy Android Gradle Plugin首先编译groovy代码

[英]How to compile groovy code first with Groovy Android Gradle Plugin

I am trying to use https://github.com/groovy/groovy-android-gradle-plugin with Android Studio 1.1.0: 我想在Android Studio 1.1.0中使用https://github.com/groovy/groovy-android-gradle-plugin

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5'
        classpath 'com.android.tools.build:gradle:1.0.1'
    }
}

./gradlew -v

------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------

Build time:   2014-11-24 09:45:35 UTC
Build number: none
Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a

Groovy:       2.3.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.7.0_65 (Oracle Corporation 24.65-b04)
OS:           Linux 3.13.0-24-generic amd64

apply plugin: 'groovyx.grooid.groovy-android'
...
dependencies {
    compile 'org.codehaus.groovy:groovy:2.4.0:grooid'
    compile 'com.android.support:multidex:1.0.0'
}

I have some Groovy classes that extend from Android SDK classes and my application Java classes that extend from Groovy classes. 我有一些从Android SDK类扩展的Groovy类和从Groovy类扩展的应用程序Java类。 Groovy classes are under src/main/groovy and Java classes are under src/main/java. Groovy类在src / main / groovy下,Java类在src / main / java下。

Groovy: Groovy的:

package com.yavezu.client.android.fragment.models.object;
import android.support.v4.app.Fragment;

public abstract class ObjectFragment2<E extends Base> extends Fragment {}
public abstract class ExistingObjectFragment2 <E extends Base> extends ObjectFragment2<E> {}

Java: Java的:

package com.yavezu.client.android.fragment.models.object;
public abstract class ObjectViewFragment<E extends Base> extends ExistingObjectFragment2<E> {}

When I build my project I get the following error: 当我构建我的项目时,我收到以下错误:

Error:(13, 66) error: cannot find symbol class ExistingObjectFragment2

It seems that gradle compiles java code first, then groovy code. 似乎gradle首先编译java代码,然后编译groovy代码。 But here I need the groovy code to be compiled first and then java code, because java code depends on groovy code. 但是在这里我需要首先编译groovy代码然后编译java代码,因为java代码依赖于groovy代码。

I see two possible solutions this: 我看到两种可能的解决方案:

  1. Put groovy code in a separate module and depend on it explicitly, but it looks like workaround, since I do not really need an extra module 将groovy代码放在一个单独的模块中并明确依赖它,但它看起来像是解决方法,因为我真的不需要额外的模块
  2. Put java code under src/main/groovy. 把java代码放在src / main / groovy下。 This would probably make java code be compiled with groovyc (please, correct me if I am wrong), but I prefer pure java code to be compiled with javac (for compatibility and performance reasons) 这可能会使用groovyc编译java代码(如果我错了,请纠正我),但我更喜欢使用javac编译纯java代码(出于兼容性和性能原因)

Is there a way to make groovy code compiled before java code in the same module? 有没有办法在同一模块中的java代码之前编译groovy代码?

Option two or setting up the plugin to look at the java source folder is your best bet. 选项二或设置插件以查看java源文件夹是最好的选择。 If you need to do joint compilation, which it looks like you do, you need the groovy compiler to see both java and groovy files. 如果你需要进行联合编译,它看起来像你做的那样,你需要groovy编译器来查看java和groovy文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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