2009-05-18 6 views
6

मैं एक साधारण निर्माण स्क्रिप्ट पर काम कर रहा हूं जिसे जावा क्लास फ़ाइल से कुछ स्थिरांक प्राप्त करना चाहिए और उन्हें मेरे फ़ाइल नामों में संस्करण संख्या के रूप में उपयोग करना चाहिए। मैं ग्रहण और अपनी खुद की चींटी का उपयोग करता हूं, लेकिन मेरे libs फ़ोल्डर में और एंटी कॉल के लिए क्लासपाथ में bcel-5.2.jar डालता हूं।चींटी लोडप्रोपर्टीज विफल रही (बीसेल त्रुटि?)

<target name="generate_version" depends="compile"> 
    <loadproperties srcfile="${dir.dest}/MyVersion.class"> 
     <classpath> 
      <fileset dir="${dir.libs}"> 
       <include name="**/bcel*.jar"/> 
      </fileset> 
     </classpath> 

     <filterchain> 
      <classconstants/> 
     </filterchain> 
    </loadproperties> 
</target> 

लेकिन दुर्भाग्य से चींटी कार्य loadproperties विफल रहता है:

build.xml:46: expected a java resource as source 

उसके बाद मैं इस कमांड लाइन का उपयोग कर ग्रहण बाहर से चींटी भागने की कोशिश की,:

set ANT_HOME=C:\Program Files\Java\ant\apache-ant-1.7.1 
"%ANT_HOME%\bin\ant.bat" 

परिणाम है

Buildfile: build.xml 

init: 
    [echo] Building project. 
    [echo] ant.home:   C:\Program Files\Java\ant\apache-ant-1.7.1 
    [echo] ant.java.version: 1.6 
    [echo] ant.version:  Apache Ant version 1.7.1 compiled on June 27 2008 

compile: 
    [javac] Compiling 262 source files to **********\build 
    [javac] Note: Some input files use or override a deprecated API. 
    [javac] Note: Recompile with -Xlint:deprecation for details. 
    [javac] Note: Some input files use unchecked or unsafe operations. 
    [javac] Note: Recompile with -Xlint:unchecked for details. 

generate_version: 

BUILD FAILED 
********************\ant\build.xml:46: expected a java resource as source 

मैं वास्तव में अब खो गया हूँ। क्या यह एक बीएसएल त्रुटि है? क्या यह मेरे अपने बीएसएल के साथ एक चींटी असंगतता है?

एक आखिरी संकेत: इस में चींटी लक्ष्य परिणामों से BCEL classpath प्रविष्टि को निकालना:

Buildfile: build.xml 

init: 
    [echo] Building project. 
    [echo] ant.home:   C:\Program Files\Java\ant\apache-ant-1.7.1 
    [echo] ant.java.version: 1.6 
    [echo] ant.version:  Apache Ant version 1.7.1 compiled on June 27 2008 

compile: 
    [javac] Compiling 262 source files to ********************\build 
    [javac] Note: Some input files use or override a deprecated API. 
    [javac] Note: Recompile with -Xlint:deprecation for details. 
    [javac] Note: Some input files use unchecked or unsafe operations. 
    [javac] Note: Recompile with -Xlint:unchecked for details. 

generate_version: 

BUILD FAILED 
java.lang.NoClassDefFoundError: org/apache/bcel/classfile/ClassParser 
     at org.apache.tools.ant.filters.util.JavaClassHelper.getConstants(JavaClassHelper.java:47) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 

अद्यतन ग्रहण में चींटी प्राथमिकताओं को सेट करने के बाद, त्रुटि संदेश बदल दिया है:

BUILD FAILED 
*********************\build.xml:46: org.apache.bcel.classfile.ClassFormatException: is not a Java .class file 
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:115) 
    at org.apache.tools.ant.Task.perform(Task.java:348) 
    at org.apache.tools.ant.Target.execute(Target.java:357) 
    at org.apache.tools.ant.Target.performTasks(Target.java:385) 
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329) 
    at org.apache.tools.ant.Project.executeTarget(Project.java:1298) 
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
    at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) 
    at org.apache.tools.ant.Project.executeTargets(Project.java:1181) 
    at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) 
    at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) 

अब मुझे लगता है कि यह शायद चींटी और बीसीईएल के बीच एक संस्करण संघर्ष है। या बीसीईएल और जेडीके 1.6। या ग्रहण और बीसीईएल और चींटी या जेडीके ... मैं खो गया हूँ।


उत्तर:

यह टिप्पणी नीचे

मैं इस उल्लेख किया जाना चाहिए था पाया है - आप कुछ भी बदलने की आवश्यकता नहीं है। डॉक्टर: "एंट 1.7 के बाद, चरित्र एन्कोडिंग आईएसओ -885 9 -1 अक्षरों से बाइट्स में कनवर्ट करने के लिए उपयोग किया जाता है, इसलिए जावा क्लास फ़ाइल पढ़ने के लिए इस एनकोडिंग का उपयोग करना है।" यह केवल सम्मेलन है जो इस तथ्य को प्राप्त करने के लिए है कि कच्चे बाइट्स पर एक वर्ण फ़िल्टर का उपयोग किया जा रहा है। ant.apache.org/manual/CoreTypes/... यूटीएफ -8 का उपयोग करना बुरा होगा! - मैकडॉवेल

+0

मुझे लगता है कि यह बीसीईएल और जेडीके के साथ कुछ संगतता समस्याओं के लिए नीचे आ जाएगा। "जावा। क्लास फ़ाइल नहीं है" एक विसंगति वर्ग संस्करण (पहले 4 बाइट्स .class) को इंगित करता है जिसे बीसीईएल द्वारा मान्यता प्राप्त नहीं है। मैं फिर से जेडीके 1.4 के साथ संकलन करने की कोशिश करता हूं। – cringe

उत्तर

1

बकवास, मैं यह जानता था!यह फ़ाइल एन्कोडिंग मुद्दों के लिए नीचे आता है। फाइलें अभी भी आईएसओ -8819-1 में हैं, लेकिन मैं यूटीएफ -8 का उपयोग कर रहा हूं। परियोजना बहुत पुरानी है और जगह में गलत एन्कोडिंग के साथ बनाई गई थी। पैरामीटर एन्कोडिंगjavac और लोडप्रोपर्टीज कार्य को ठीक करता है।

<target name="generate_version" depends="compile"> 
    <loadproperties encoding="iso-8859-1" srcfile="${dir.dest}/MyVersion.class"> 
     <filterchain> 
      <classconstants/> 
     </filterchain> 
    </loadproperties> 
</target> 

मैंने सोचा कि यह हमारे सबवर्सन सर्वर द्वारा बदल गया है, लेकिन मुझे लगता है कि मैं UTF-8 अपने आप को अब हर एक फ़ाइल को रूपांतरित करने ... लगता है कि एसओ के लिए एक और सवाल है।

+3

मुझे इसका उल्लेख करना चाहिए था - आपको कुछ भी बदलने की आवश्यकता नहीं है। डॉक्टर: "एंट 1.7 के बाद, वर्ण एन्कोडिंग आईएसओ -885 9 -1 अक्षरों से बाइट्स में कनवर्ट करने के लिए प्रयोग किया जाता है, इसलिए जावा क्लास फ़ाइल पढ़ने के लिए इस एनकोडिंग का उपयोग करना है।" यह तथ्य यह है कि कच्चे बाइट्स पर एक चरित्र फ़िल्टर का उपयोग किया जा रहा है। http://ant.apache.org/manual/CoreTypes/filterchain.html यूटीएफ -8 का उपयोग करना बुरा होगा! – McDowell

+0

एचएम, अगर मैं इसे सही समझता हूं तो मुझे 100% यकीन नहीं है। मैं परिवर्तित फ़ाइलों और मूल के साथ निर्माण को फिर से चलाऊंगा और उत्तर प्राप्त करने के लिए एन्कोडिंग पैरामीटर को लागू/हटा दूंगा। लेकिन मैं पहले कनवर्ट की गई फाइलों को प्रतिबद्ध करूंगा ... ;-) – cringe

+0

ठीक है, वास्तव में एकमात्र दोष गायब पैरामीटर एन्कोडिंग = "आईएसओ -885 9 -1" था। धन्यवाद @ एमसीडॉवेल! मुझे लगता है कि मुझे पूरे फिल्टरचेन आरटीएफएम होना चाहिए। :-( – cringe

0

क्लासपाथ त्रुटि की तरह दिखता है। त्रुटियों पर आपको कुछ और विवरण देने के लिए "ant -v" चलाएं।

1

documentation for loadproperties का कहना है कि नेस्टेड classpath तत्व संसाधन विशेषता के साथ प्रयोग के लिए है - srcfile उपयोग करने का विकल्प।

अपने वैश्विक क्लासपाथ में बीसीईएल जार जोड़ें। ग्रहण में, इसे runtime preferences में अपने क्लासपाथ में वैश्विक प्रविष्टि के रूप में जोड़ें। कमांड लाइन पर, -lib स्विच का उपयोग करें।

alt text http://help.eclipse.org/ganymede/topic/org.eclipse.platform.doc.user/images/Image91_ant_prefs_1.png

+0

आह, इससे मदद मिली - कम से कम कुछ सेकंड के लिए। मैंने सवाल अपडेट किया। – cringe

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