2011-07-03 14 views
7

मैं maven3.03 और Windows XP पर ग्रहण 3.5 उपयोग कर रहा हूँ। मैंने पुराने वेब प्रोजेक्ट को मैवेन कॉन्फ़िगरेशन शैली में परिवर्तित किया।
जब मैं परियोजना को संकलित करता हूं तो सबकुछ संकलित करता है।
नोट: कक्षा में शामिल हैं: मेवेन निर्भरता और जेडीके (1.6_018)।
जब मैं mvn का उपयोग कर कमांड लाइन से संकलन, मैं कुछ त्रुटियाँ मिलती है:
1.package com.sun.xml.internal.stream.buffer.stax मौजूद नहीं है।
2.package com.sun.xml.internal.stream.writers
मौजूद नहीं है 3.cannot प्रतीक लगता है - प्रतीक: वर्ग XMLDOMWriterImpl
4.Package com.sun.xml.internal.messaging.saaj.util करता है मौजूद नहीं
5.package com.sun.xml.internal.bind.v2.runtime.unmarshaller मौजूद नहीं है
6.cannot प्रतीक लगता है - प्रतीक: वर्ग NamespaceContexHelper
7.cannot प्रतीक प्रतीक लगता है: वर्ग ByteOutputStreamMaven संकलन में विफल रहता है, जबकि ग्रहण सफल हुआ

मैं देख सकता हूँ कि सूर्य जार के साथ यह कुछ। लेकिन मैं समझ नहीं पा रहा हूं कि ग्रहण ठीक क्यों है और कमांड लाइन नहीं है।

संपादित: त्रुटियों मैं उपरोक्त सूची में उल्लेख नहीं था से एक है:

[ERROR]<path>\EventsViewer.java:[54,69] inconvertible types found: <br>java.util.SortedMap<java.util.Date,java.util.List<com.myClass>> 
required: java.util.Map<? extends java.util.Date,? extends java.util.List<com.myOtherClass>> 


जब मैं ग्रहण में एक ही पंक्ति को देखने मैं मिल चेतावनी:

Type safety: Unchecked cast from SortedMap<Date,List<myClass>> to Map<? extends Date,? extends 
List<myOtherClass>> 

ग्रहण में मुझे चेतावनी मिलती है और मैवेन में मुझे त्रुटि मिलती है। मैं org.eclipse.jdt.core.prefs जाँच की थी और देखो सेटिंग org.eclipse.jdt.core.compiler.problem.forbiddenReference = चेतावनी है।

अद्यतन: मैं ऊपर ऐसी कुछ त्रुटियों का पढ़ा गया। "समस्या" यह है कि ग्रहण में यह अप्रयुक्त आयात के रूप में दिखाई देता है। आश्चर्यजनक मैवेन इसे त्रुटि के रूप में रिपोर्ट करें। इस अप्रयुक्त आयात को हटाने के बाद त्रुटि समाप्त हो गई थी। लेकिन फिर भी समस्या 3 और 7 occures

निष्कर्ष: मुझे लगता है कि कि चेतावनी javac में त्रुटियों हो जाते हैं। चूंकि मैं किसी भी supress चेतावनी का उपयोग नहीं करते हैं। मुझे आश्चर्य है कि त्रुटि अलग है। यह क्या है?

+0

सबसे अधिक संभावना आपके 'JAVA_HOME' नहीं है 'Maven वातावरण में सेट। –

+0

क्या प्लेटफार्मों आप Maven चल रहे हैं और? – Arpit

उत्तर

2

डबल चेक आप ग्रहण और मेवेन दोनों के लिए एक ही जेडीके का उपयोग कर रहे हैं। भले ही आपको लगता है कि आप हैं, वैसे भी दोबारा जांच करें।

ये पैकेज कुछ हैं जो जावा के कुछ संस्करणों में शामिल हैं और अन्य नहीं।

+0

+1 में ग्रहण जावा संस्करण अलग है, Maven-संकलक प्लगइन जोड़ने 1 की ओर इशारा करते हुए स्रोत और लक्ष्य की कॉन्फ़िगरेशन के साथ।6 और मेवेन प्रोजेक्ट संदर्भ मेनू से प्रोजेक्ट कॉन्फ़िगरेशन को अपडेट करने से कई मामलों में समस्या हल हो जाएगी – Omnaest

+0

स्पष्ट होने के लिए, मैं वास्तविक निर्देशिका के बारे में बात कर रहा हूं जिसके लिए Java 5 जावा के बजाय जावा का उपयोग किया जा रहा है जावा 6 –

+0

ठीक है मैंने इसे जोड़ा किसी को – Omnaest

0

जावा संस्करण अलग है, तो स्रोत और लक्ष्य 1 की ओर इशारा का विन्यास के साथ maven-compiler-plugin

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.1</version> 
       <configuration> 
        <target>1.6</target> 
        <source>1.6</source> 
        <encoding>UTF-8</encoding> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

जोड़ने।6 और Maven परियोजना संदर्भ मेनू से परियोजना विन्यास को अद्यतन करने के कई मामलों में सिंक समस्या से बाहर (जो अलग संकलन परिणाम की ओर जाता है) का समाधान होगा:

enter image description here

+0

धन्यवाद। मैंने आपके द्वारा लिखे गए मेवेन-कंपाइलर-प्लगइन की कोशिश की और इससे मदद नहीं मिली। मैंने आपके दूसरे सुझाव ("प्रोजेक्ट कॉन्फ़िगरेशन अपडेट करें") का प्रयास नहीं किया (यह कभी-कभी मेरे क्लासपाथ को अजीब तरीके से बदलता है) लेकिन मैं इसे फिर से कोशिश करूंगा और आपको बता दूंगा। एक बार फिर धन्यवाद। – ronk

+0

काम नहीं किया। अजीब चीज यह है कि यह jclK1.6_018 का उपयोग कर ग्रहण के बजाय J2SE_1.6 के साथ .classpath फ़ाइल को बदलता है। – ronk

9

यह असली कारण शायद from maven forum's answer

है

आंतरिक ""। जेरोम सही है कि यह rt.jar से कक्षाएं com.sun उपयोग करने के लिए अभ्यास की सिफारिश नहीं कर रहा है और विशेष रूप से चिह्नित है ", तुम सिर्फ मुसीबत के लिए पूछ रहे हैं

हालांकि मैं इसके बारे में उत्सुक था, इसलिए इसे आजमाया। उपरोक्त वर्ग वास्तव में ग्रहण द्वारा उपयोग किया जा सकता है। हालांकि javac का उपयोग कर कमांडलाइन पर कोड संकलित करना "अस्तित्व में नहीं है" त्रुटि के साथ विफल रहता है। तो मेरी धारणा है कि सूर्य का जावा कंपाइलर पता लगाता है कि एक विशेष "आंतरिक" कक्षा का उपयोग किया जा रहा है, और कक्षा को आयात करने से इनकार कर दिया जाता है। ग्रहण एक अलग कंपाइलर का उपयोग करता है जो संभवतः इस चेक में नहीं है।

मैवेन सिस्टम निष्पादन पथ में उपलब्ध जावाक कंपाइलर का उपयोग करता है। इसलिए समस्या मैवेन के साथ बिल्कुल कुछ नहीं है। यह संकलक है कि मैवेन आविष्कार कर रहा है जो स्रोत को संकलित करने से इंकार कर रहा है। मैं इस आंतरिक पहुंच के "अवरुद्ध" को अक्षम करने के लिए javac कमांडलाइन में किसी भी सार्वजनिक झंडे को नहीं देख सकता, इसलिए जब तक आप सूर्य के जावैक कंपाइलर का उपयोग करने से बचना नहीं चाहते हैं तो आपको केवल इस आंतरिक वर्ग का उपयोग करने से बचना होगा। Foo.java लेकिन वह /usr/java/jdk1.6.0_03/jre/lib/rt.jar javac -cp:

बस मस्ती के लिए, मैं classpath पर rt.jar डालने की जेरोम के सुझाव बाहर करने की कोशिश की अभी भी संकलन करने में विफल रहा।

बाइटऑटपुटस्ट्रीम क्लास कक्षा.forनाम ("..") के माध्यम से रनटाइम पर लोड किया जा सकता है।

दिलचस्प है, एक परियोजना मैं पर काम कर रहा हूँ वर्ग com.sun.org.apache.xml.internal.utils.SAXSourceLocator आयात करने के लिए होता है; और यह ठीक काम करता है। चेतावनी जारी की जाती है, लेकिन कोड संकलित करता है (और हाँ, यह ठीक करने के लिए मेरी TODO सूची पर है :-)। तो यह नहीं है आंतरिक कक्षा जो अवरुद्ध किए जा रहे हैं, बस चुने गए हैं। "

0

यह मेरे मामले जाता है:, Intellij स्वचालित रूप से ऊपर आयात लाइन को हटाने के बाद आयात खंड import com.sun.xml.internal.bind.v2.TODO;

में इस लाइन जोड़ा मैं //TODO जोड़ने के बाद इंटेलीजे में एक ही गलती है, समस्या हल हो गई अब मैं कर सकते हैं। Maven का उपयोग कर सफलतापूर्वक संकलन करने में सक्षम

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