2012-01-20 20 views
15

का निर्माण करते समय फाइलर एक्सेप्शन मेरे पास नेटबीन्स 7 में जावा ईई 6 प्रोजेक्ट है जो मैं संकलित करता हूं और आईडीई में इसे शुरू करता हूं। javax.annotation.processing.FilerException: हालांकि, जब मैं साफ करने और परियोजना का निर्माण, मैं एकजावा ईई 6 प्रोजेक्ट

java.lang.RuntimeException हो रही है प्रयास प्रकार के लिए एक फ़ाइल से बनाना {myclass}

(जहां myclass हमेशा एक जेपीए इकाई वर्ग है) ।

यदि मैं कोड में कुछ बदलता हूं तो कौन सी इकाई वर्ग बदलता है।

मुझे कोई त्रुटि नहीं है कि इस त्रुटि का कारण क्या हो सकता है - क्या कोई यह विचार कर सकता है कि क्या देखना है।

एकमात्र अतिरिक्त lib जिसका उपयोग मैं कर रहा हूं वेग है।

अद्यतन: मैं एक ही डेटाबेस पर दो दृढ़ता इकाइयों का उपयोग कर रहा हूं, एक 'सामान्य' एक और एक गैर लेनदेन वाला। गैर-लेनदेन वाला जिसे मैं डेटाबेस में चीजों को लॉग इन करने के लिए उपयोग करता हूं; एक लॉग घटना के प्रत्येक डालने के बाद एक प्रतिबद्धता के साथ।

जब मैं इसे बदलता हूं और केवल एक 'सामान्य' पु का उपयोग करता हूं, तो परियोजना ठीक से संकलित होती है। क्या यह हो सकता है कि दो पीयू eclipselink द्वारा किए गए कुछ अनुकूलन में हस्तक्षेप करते हैं?

यहाँ स्टैक ट्रेस की शुरुआत है:

An annotation processor threw an uncaught exception. 
Consult the following stack trace for details. 
java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file for type de.guj.contenthub.ftdts.entity.AgofEntry_ 
    at org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor.process(CanonicalModelProcessor.java:407) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:625) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:554) 
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:699) 
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:981) 
    at com.sun.tools. 

उत्तर

4

ऐसा लगता है, समस्या यह है कि मैं एक और दो अलग अलग हठ इकाइयों में एक ही इकाई वर्ग का उपयोग करें। मुझे यकीन नहीं है कि यह सामान्य रूप से जेपीए द्वारा प्रतिबंधित है या केवल eclipselink के साथ एक समस्या है।

मुझे मिला एक 'समाधान' मेरी इकाई वर्ग को डुप्लिकेट करना है। अच्छा नहीं है, लेकिन अभी के लिए काम करता है।

अधिक उत्तरों अभी भी आपका स्वागत है।

22

एक ही इकाई वर्ग का उपयोग करके दो दृढ़ता इकाइयां होने के कारण समस्या प्रतीत होती है।

मेरे मामले में मेरे पास डेटा पूछने के लिए एक इकाई थी और दूसरे प्रमाणीकरण के लिए। प्रमाणीकरण के लिए एक को मेरी इकाई वर्गों के बारे में जानने की आवश्यकता नहीं है, इसलिए नेटबींस में मुझे "MyWebServiceProject" मॉड्यूल "में सभी इकाई वर्ग शामिल करना" अनचेक करना पड़ा।
या जोड़ें:

<exclude-unlisted-classes>true</exclude-unlisted-classes>

कि हठ इकाई के लिए web.xml फ़ाइल करने के लिए।

2

मुझे एक ही समस्या है, और इस बिंदु पर थोड़ा सा निदान किया है कि मेरे पास एक बदसूरत कामकाज है जो आदर्श नहीं है।

मेरे पास मेरे persistence.xml में दो दृढ़ता इकाइयां हैं: एक परीक्षण के लिए और एक वास्तविक उत्पादन निर्माण के लिए।

मेरे पास ऐसा कारण है क्योंकि यदि मैं एक और दृढ़ता रखने की पसंदीदा विधि का उपयोग करता हूं।स्रोत/परीक्षण/संसाधन/मेटा-आईएनएफ फ़ोल्डर के तहत एक्सएमएल, परीक्षण विफल हो जाते हैं क्योंकि जेनरेट किए गए वर्ग लक्ष्य/जेनरेट-स्रोत/टेस्ट-एनोटेशन फ़ोल्डर में डालते हैं और क्लासपाथ में सही स्थान पर नहीं होते हैं वे संकलित करते हैं।

समस्या यह है कि यदि दोनों को "बहिष्कृत-असूचीबद्ध-वर्ग" सत्य पर सेट किया गया है, तो जावैक कंपाइलर संकलक के दौरान एनोटेशन कक्षाओं को फिर से बनाने की कोशिश करता है: संकलित और निश्चित रूप से दूसरे पीयू पर विफल रहता है क्योंकि कक्षाएं पहले से ही हैं बनाया गया है

तो इसे काम करने के लिए, मैंने पीयू के एक के लिए "बहिष्कृत-असूचीबद्ध-वर्ग" को झूठा करने के लिए सेट किया, जो मुझे जेनरेट मेटा कक्षाएं प्राप्त करता है, और परीक्षण विफल हो जाते हैं (क्योंकि पीयू में शामिल नहीं है आवश्यक संस्थाएं)।

मैं फिर ध्वज को वापस सही पर फ़्लिप करता हूं, और फिर से निर्माण चलाता हूं। चूंकि कक्षाएं पहले ही संकलित हो चुकी हैं, संकलन: संकलन नहीं चलता है, और परीक्षण सफल हो सकते हैं।

वर्कअराउंड proc था: javac संकलक आर्ग के लिए कोई भी यहाँ वर्णित के रूप में: persistence.xml में

<property name="eclipselink.canonicalmodel.subpackage" value="foobar"/> 
प्रत्येक हठ इकाई के लिए

की स्थापना करके http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <compilerArguments> 
        <endorseddirs>${endorsed.dir}</endorseddirs> 
        <proc:none/> 
        <Xlint/> 
        <Xlint:-path/> 
        <verbose /> 
       </compilerArguments> 
       <showDeprecation>true</showDeprecation> 
      </configuration> 
     </plugin> 
+0

धन्यवाद, आपका जवाब मुझे पता चला है सही दिशा: सेट * को बाहर-असूचीबद्ध कर दिया जाएगा वर्गों * ** सच ** और संस्थाओं मैन्युअल रूप से प्रत्येक persistenceUnit – GameDroids

14

मैं इस हल कर ली। मूल्य प्रत्येक इकाई के लिए अद्वितीय होना चाहिए। कक्षाएं तब विभिन्न पैकेजों में उत्पन्न होती हैं, उदाहरण के लिए। com.mycompany.foo.PojoOne_ और com.mycompany.bar.PojoOne_ बस com.mycompany.PojoOne_ के बजाय।

Source

+0

के लिए जोड़ने के लिए मैं एक ही मुद्दा था और इस समाधान ने हल किया –

0

मैं सिर्फ अपने testPu के लिए एक जोड़ने के लिए की जरूरत का उपयोग कर (बल्कि ज़रूरत से JUnit परीक्षण के लिए स्मृति डर्बी में, करने के लिए वास्तव में Glassfish/MySQL स्थापना का उपयोग करें)। इसने testPU को रनटाइम पीयू से कनेक्शन और उप-पैकेज में अलग किया, लेकिन अन्यथा मेरी इकाई परिभाषाओं को प्रभावित नहीं किया।

0

प्रत्येक दृढ़ता इकाई के लिए इकाई वर्गों को मैन्युअल रूप से में एक समान श्रेणी को एक स्थिरता इकाई से अधिक शामिल नहीं करना चाहिए।

+0

एसओ में आपका स्वागत है! इस तरह के पुराने प्रश्न का उत्तर देने में ज्यादा समझ नहीं आती है, वास्तव में कई जवाब हैं और चिह्नित उत्तर भी हैं। इसके अलावा आपको सहायता केंद्र के [इस अनुभाग] (http://stackoverflow.com/help/how-to-answer) को पढ़ने की आवश्यकता है। –

5

उत्तरकर्ता इसे persistence.xml फ़ाइल में बनाना है; एक ही इकाई का उपयोग कर किया जा सकता है एक ही persistence.xml भीतर

entity1.prod 
entity1.dev 
0

दो हठ इकाइयों:

<persistence-unit name="prod_PU"> 
    <properties> 
    <property name="eclipselink.canonicalmodel.subpackage" value="prod"/> 
    </properties> 
</persistence-unit> 
<persistence-unit name="dev_PU"> 
    <properties> 
     <property name="eclipselink.canonicalmodel.subpackage" value="dev"/> 
    </properties> 
</persistence-unit> 

उदाहरण के लिए, ENTITY1 के लिए पैकेज के रूप में उत्पन्न हो जाएगा। तो या तो दोनों इकाइयों द्वारा उपयोग की जाने वाली इकाइयों में से एक को हटाएं या इकाइयों को बदलें। यह खुली persistence.xml फ़ाइल करने के लिए और आपके द्वारा जोड़े गए अन्य इकाइयों को देखने के लिए नीचे स्क्रॉल करें। अपनी आवश्यकताओं के अनुसार इसे संशोधित करें। उम्मीद है कि यह मदद करता है।

0

दृढ़ता में जोड़ें।xml फ़ाइल लाइन

सच

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