2013-10-11 8 views
6

में रखा गया है, मैंने ग्रोवी में एक कस्टम कार्य लागू किया है। यदि मैं groovy (X.groovy) में कार्यान्वित करने के लिए उपयोगिता वर्ग प्रदान करता हूं और इसे buildsrc में रखता हूं, तो कार्य कार्य करता है। अगर मैं जावा (Y.java) में एक समान वर्ग को लागू करने और एक ही निर्देशिका में यह जगह, कार्य निम्नलिखित त्रुटि संदेश के साथ विफल रहता है:ग्राडल जावा स्रोत से संकलित जावा क्लास फ़ाइलों को लोड नहीं कर रहा है जो buildsrc

: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 प्रलेखन कहते हैं, "तुम सिर्फ इस निर्देशिका में अपने निर्माण स्रोत कोड डाल दिया और एक जावा/ग्रूवी परियोजना के लिए लेआउट सम्मेलन से चिपक कर सकते हैं "और इसकी डिफ़ॉल्ट बिल्डस्क्रैक बिल्ड स्क्रिप्ट लागू की जाएगी।
स्रोत: http://www.gradle.org/docs/current/userguide/organizing_build_logic.html#sec:build_sources

प्रोजेक्ट लेआउट ग्रोवी स्रोत निर्देशिका को ग्रोवी और जावा कोड रखने की अनुमति देता है।
स्रोत: 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

सिर्फ एक विचार: शायद यह पैकेज घोषणा से संबंधित है। जावा ग्रोवी से यहां अधिक पसंद है और स्रोत फ़ाइल को एक अनुसार निर्देशिका में उम्मीद करता है। मैं आपकी समस्या का पुनरुत्पादन नहीं कर सका। क्या आप एक छोटी आत्मनिर्भर परियोजना प्रदान कर सकते हैं जो आपकी समस्या का प्रदर्शन करती है?

चियर्स, रेने

+0

मैंने इंटेलिजे में अपनी बड़ी परियोजना के संदर्भ में उपरोक्त कोड चलाया था, लेकिन यह इंटेलिजे के बाहर एक स्वच्छ परियोजना में काम करता है। मुझे यह समझना होगा कि बड़े संदर्भ में समस्या का कारण क्या है। – wjohnson

2

व्यापक संदर्भ में समस्या Gradle 1.8 उम्मीद में JDK8 के प्रारंभिक पहुँच संस्करण और क्या वर्ग लोडर groovyCompile में के बीच बाईटकोड संस्करणों में एक असंगति था। जब मैंने IntelliJ में भाषा स्तर को जेडीके 7 में बदल दिया, तो सब ठीक काम किया।

संबंधित मुद्दे