2013-10-11 31 views
6

groovyでカスタムタスクを実装しました。 groovy(X.groovy)で実装されているユーティリティクラスを提供し、それをbuildsrcに配置すると、このタスクは機能します。私は、Javaでの同等クラス(Y.java)を実装し、同じディレクトリに配置した場合、タスクは、次のエラーメッセージで失敗しますJavaソースからコンパイルされたJavaクラスファイルをロードしないでください。

:buildsrc:compileGroovystartup failed: 
General error during conversion: Could not load class 'com.myinc.gradle.api.data.Y' 
from file:/project/buildsrc/build/classes/main/com/myinc/gradle/api/data/Y.class. 

Y.classファイルには、エラーで指定された場所に存在しますメッセージ。 Y.javaは、通常の場所のいずれかにあるとき ビルドが失敗します。

buildsrc/src/main/groovy/.../Y.java<br> 
buildsrc/src/main/java/.../Y.java 

のGradleのドキュメントは言う、「あなただけのこのディレクトリにビルドソースコードを配置し、Java/Groovyのプロジェクトのレイアウト規則に固執することができますデフォルトのbuildsrcビルドスクリプトが適用されます。
ソース:http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources

プロジェクトレイアウトでは、GroovyソースディレクトリにGroovyとJavaコードを含めることができます。
出典:http://www.gradle.org/docs/current/userguide/groovy_plugin.html#sec:groovyCompile

複製する:

プロジェクト/ build.gradle:

task t (type: sample.MyTask) { 
    println "configuring task" 
} 

プロジェクト/ BUILDSRC/srcに/メイン/グルーヴィー/サンプル


MyTask.groovy

package sample 

import org.gradle.api.DefaultTask 
import org.gradle.api.tasks.TaskAction 

class MyTask extends DefaultTask { 
    @TaskAction 
    public void task() { 
    println 'task action' 
    new X().m() 
// new Y().m() // uncommenting this line should generate an error when you build 't' 
    } 
} 

X.groovy

package sample; 
class X { 
    void m() { 
    println "x.m" 
    } 
} 

Y.java

package sample; 
public class Y { 
    void m() { 
    System.out.println("y.m"); 
    } 
} 

OSX 10.8.4、IntelliJの12.1、Gradleの1.8

答えて

1

ただアイデア:たぶん、それはパッケージ宣言に関連しています。 JavaはGroovyよりも厄介であり、ソースファイルをディレクトリに置くことを期待しています。私はあなたの問題を再現できませんでした。あなたの問題をデモする小さな自己完結型プロジェクトを提供できますか?

より大きな文脈で歓声、 ルネ

+0

私はIntelliJの私の大きなプロジェクトのコンテキストで上記のコードを実行しましたが、IntelliJ以外のクリーンなプロジェクトで動作します。私は大きな文脈で何が問題を引き起こしているのかを整理しなければならないでしょう。 – wjohnson

2

問題はJDK8の早期アクセス版とのGradle 1.8を期待でgroovyCompileのどのクラスローダとの間にバイトコードのバージョンの非互換性でした。 IntelliJの言語レベルをJDK7に変更したところ、すべて正常に機能しました。

関連する問題